2009-08-07 7 views
0

サービス参照の追加機能を使用してVSTS2008(C#コンソールアプリケーション、using .Net 3.5)から参照しています。同じLAN内の別のコンピュータでIIS 7.0でホストされているWCFサービスへの参照を追加します。私はクライアント側のapp.configが自動的に生成されて非常に奇妙であることがわかります。ここで、コンテンツは、strange WCFクライアント側app.configが生成されました

私の混乱は、エンドポイント・アドレスは「http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo」ですが、実際には(私はWCFのホスティングマシンlabtest1からWSDLを取得するためにIEでhttp://labtest1/WcfDemo/service.svcを使用することができます)「http://labtest1/WcfDemo/service.svc」でなければなりません。しかし、アドレス「http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo」を使ってIEからWSDLを取得することはできません。マシンlabtest1の内部IPアドレスは10.10.200.10です。どんなアイデアが間違っている?

BTW:クライアント関数が機能します。つまり、WCFエンドポイントメソッドの呼び出しによって期待される結果が返される可能性があります。 「間違った」エンドポイントアドレスは、どのようにして正しい結果を返すことができますか?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IOrderManagement" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IOrderManagement" 
       contract="ServiceReference1.IOrderManagement" name="BasicHttpBinding_IOrderManagement" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

EDIT 1:

これは私がIIS 7.0の側で使用していた構成ファイル(web.configファイル)です。 service.svcをmachine labtest1のデフォルトWebサイト(ポート80)のWcfDemoサブディレクトリの下に置きます。正しいエンドポイントアドレスは "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"以外の "http://labtest1/WcfDemo/service.svc"である必要がありますか?

次の2つのURLの離れを維持する必要があり
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="Foo.ServiceBehavior" 
     name="Foo.OrderManagement"> 
     <endpoint address="" binding="basicHttpBinding" contract="Foo.IOrderManagement" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Foo.ServiceBehavior"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 
+1

これはIISでホストされているため、サービスアドレスは(仮想ディレクトリのURL)+(SVCファイルの名前)にする必要がありますので、あなたの場合はhttp://labtest1/WcfDemo/service.svc - まだですなぜサービスリファレンスを追加してサービスアドレスを追加したのか分かりません。なぜなら、なぜそれがうまくいくのでしょうか?:) –

+0

ありがとうMarc、これまでに似たような問題に会ったことがありますか?私の混乱は、エンドポイントアドレスは、predicableです、そのような奇妙なべきではないです。 :-) – George2

答えて

1

  • あなたはあなたが実際に使用するものが

これらのサービスを呼び出す

  • からWSDLを取得するために使用するもの異なることができます! http://labtest1/WcfDemo/service.svcからWSDLを取得できるからといって、そこでサービスが呼び出されるわけではありません。

    しかし、私は同意する - 奇妙設定ファイルを見て....再び、「サービス参照の追加」機能は、偉大なコンフィグを作成するための知られていない....

    私の提案は:接続しようWcfTestClient.exe( "program files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE"ディレクトリにあります)を使用してサービスにアクセスし、これが何を返すかを確認してください。あなたのケースでは、すなわちhttp://labtest1/WcfDemo/service.svc -

    alt text http://i25.tinypic.com/66yp7a.jpg

    がサービスを発見するために、あなたがでWSDLを見つけることができますアドレスを入力する必要があります。このテストクライアントはどのエンドポイントを見つけるのですか?

    マルク・

  • +0

    Marc、実際に私の混乱は、anthoerコンピュータからです、私はサービス参照を追加すると、http://labtest1/WcfDemo/service.svcです。IE http://labtest1/WcfDemo/service.svcからは動作しますが、http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemoはIEからは動作せず、クライアントアプリケーションでWCFサービスを呼び出せます。私はWCFTestClient.exeを使ってテストしましたが、WCFTestClient UIのConfigファイルの内容には "http://labtest1/WcfDemo/service.svc"というアドレスが含まれています。 – George2

    +0

    私はまた、同じVSTS 2008ソリューションに新しい空のコンソールアプリケーションプロジェクトを追加しようとしましたが、サービス参照を追加すると、結果は不思議な長いアドレスではなくlabtest1/WcfDemo/service.svcになります。 – George2

    +1

    George2:IEは、サービスページを "見る"ことができ、メタデータ(WSDL)が利用可能なアドレスにしかありません。 IEは実際のサービスアドレスで実際にサービスを呼び出すことはできません - あなたの呼び出しはSOAPメッセージを期待し、IEはそのSOAPメッセージを送信できません。そのためにWcfTestClientを使用します。 –

    1

    私は、WCFサービスは、ドメイン内のサーバーでホストされたときにこれが起こる見てきました。このユーティリティはインターネットの代わりにイントラネットのURLを作るようだ。

    +0

    "ドメイン内のサーバー" - ドメイン内の意味は?同じWindows Active Directoryドメインまたは同じLAN上にありますか?あなたはより多くの情報を提供できますか? – George2

    +0

    私はすべてのサービス参照frmo VSTS IDEと同じソリューション内のサービス参照サブフォルダを削除しようとしましたが、サービス参照の追加を使用して再度参照を追加すると、生成されたcient側のapp.configが正常に見えます。何か案は?私は非常に混乱しています。 – George2

    +1

    「ドメイン内のサーバー」とは、実際にはWindowsのアクティブディレクトリドメインを意味します。私はあなたをさらに助けることはできません。私は単純にユーティリティを作成した設定ファイルを放棄し、独自のファイルを書きました。(それほど要求の厳しいアプリケーションではありません) – Dabblernl

    関連する問題