0

サービスを次のように構成しました。

<system.serviceModel>
    <services>
      <service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:808/service" />
          </baseAddresses>
        </host>
        <endpoint address="net.tcp://127.0.0.1:808/service/"
                  binding="netTcpBinding"
                  contract="WcfService1.IService1"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"   />

      </service>
    </services>
    <protocolMapping>
      <add scheme="net.tcp" binding="netTcpBinding"/>
    </protocolMapping>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="MyEndpointBehaviour">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

クライアントは次のようになります。

 <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IService1" sendTimeout="00:05:00" />
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://127.0.0.1/service/" binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_IService1" contract="IService1"
                name="NetTcpBinding_IService1">
                <identity>
                    <servicePrincipalName value="host/MachineName" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

WCFTestClient または SVCutil を使用すると、サービスを検出してアクセスし、プロキシまたはスタブを生成できます。

しかし、次のエラーが発生するメソッドのいずれかを呼び出したい場合:

サービスの呼び出しに失敗しました。考えられる原因:サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシは無効です。詳細については、スタック トレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。

ソケット接続が中止されました。これは、メッセージの処理中にエラーが発生したか、リモート ホストが受信タイムアウトを超過したか、基になるネットワーク リソースの問題が原因である可能性があります。ローカル ソケットのタイムアウトは「00:04:59.9980468」でした。

4

4 に答える 4

2

エンドポイント ブロック内に次の値を設定します。

<identity>
   <dns value ="localhost"/>
</identity>
于 2014-01-13T11:28:47.867 に答える
1

私は同じ問題に直面しました。EndpointAddressのポートアドレスの問題でした。Visual Studio では、ファイル (Service1.svc など) のポート アドレスと wcf プロジェクトのポート アドレスは、EndpointAddressに指定したものと同じでなければなりません。私のために働いたこの解決策を詳しく説明しましょう。

ポート アドレスを確認するには、2 つの手順があります。

  1. WCF プロジェクトでサービス ファイル (Service1.svc など) を右クリックします -> [ブラウザーで表示] を選択するよりも、ブラウザーでhttp://localhost:61122/Service1.svcのような URL を持っているので、次のようにポート アドレス 書き留めます。61122

  2. wcf プロジェクトを右クリック -> [プロパティ] を選択 -> [ Web] タブに移動- > [サーバー] セクションに移動-> [ Visual Studio 開発サーバーを使用] を選択 -> [特定のポート]を選択し、以前に Service1 から見つけたポート アドレスを指定します。サービスサービス。つまり(61122)です。

以前は、別のポート アドレスがありました。最初のステップで取得したポート アドレスEndpointAddress 61122を適切に指定すると、問題は解決しました。

これで問題が解決することを願っています。

于 2016-10-21T07:18:35.113 に答える
1

あなたが探している答えではないかもしれませんが、ローカル マシンでの開発には常に HTTP エンドポイントを使用します。Net.TCP は、IIS のサーバーでホストされている場合にのみうまく機能することがわかりました。

IIS サーバーに展開すると、NET.TCP エンドポイントを簡単に追加できます。注: ベース アドレスは、IIS で設定されているため、もはや影響を与えません。新しいエンドポイントをテストするには、サーバーにリモート接続しているときにブラウザーでサービスを開くことから始めるのが最善です。これにより、最良のエラー メッセージが得られます。

私が正しく理解している場合、サービス参照を作成するときにエンドポイントを選択しようとしていますか? それが今の仕組みです。を使用してサービス参照を作成する場合 127.0.0.1/service/Service1.svc

構成ファイルに次のような内容が表示されるはずです。(サービス エンドポイントを作成するときは、常にプロトコルをサフィックスとして付けて名前を付けます。

        <endpoint address="http://servername:8090/servername/servername.svc/Business"
              binding="basicHttpBinding" bindingConfiguration="BusinessHTTP"
              contract="servername.IService" name="BusinessHTTP" />
       <endpoint address="net.tcp://servername:8030/Service/Service.svc/Business"
              binding="netTcpBinding" bindingConfiguration="BusinessTCP"
              contract="servername.IService" name="BusinessTCP" />

次に、コードで使用するエンドポイントを選択できます。

Dim svc as New SeviceReferenceName.BusinessClient("BusinessTCP")"
于 2013-09-04T16:18:34.027 に答える