0

WCFプロジェクトのapp.configファイルを削除しようとしています。生成しているDLLに設定をハードコーディングする必要があります。

でプロキシクラスを作成しましたがsvcUtil、クライアントを使用すると正常に動作しますApp.config

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="ManagementEndpoint">
        <security mode="None" />
      </binding>
    </netTcpBinding>
  </bindings>
  <client>
    <endpoint address="net.tcp://example.com/MyApp/DomainManagement"
        binding="netTcpBinding" bindingConfiguration="ManagementEndpoint"
        contract="MyApp.DomainManagementProxy.IDomainManagement"
        name="DomainManagementEndpoint" />
  </client>
</system.serviceModel>

ただし、自分を削除App.configしてデフォルトのコンストラクターを次のコンストラクターに置き換えると

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class DomainManagementClient : System.ServiceModel.ClientBase<MyApp.DomainManagementProxy.IDomainManagement>, MyApp.DomainManagementProxy.IDomainManagement
{

    public DomainManagementClient() 
        : base(new NetTcpBinding(SecurityMode.None, false), 
               new EndpointAddress("net.tcp://example.com/MyApp/DatabaseManagement"))
    {
    }

    //(Snip)

クライアントで最初のメソッドを呼び出すとすぐに、次のエラーが発生します

EndpointDispatcherでのContractFilterの不一致が原因で、アクション' http://example.com/MyApp/DomainManagement/IDomainManagement/GetServerSetup 'のメッセージを受信者で処理できません。これは、コントラクトの不一致(送信者と受信者の間のアクションの不一致)または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインディング(メッセージ、トランスポート、なしなどのセキュリティ要件を含む)を持っていることを確認します。

バインディングを正しく機能させるには、コンストラクターに何を変更/入力する必要がありますか?

4

1 に答える 1

1

ConfigのURLは「net.tcp://example.com/MyApp/DomainManagement」です。ただし、コードには「net.tcp://example.com/MyApp/DatabaseManagement」があります。それは不一致である可能性があります。

生成されたプロキシを変更することはお勧めできません。ただし、URLとバインディングをハードコーディングすることにしたので、アプリケーションコードから以下のようにすることができます。

DomainManagementClient client = new DomainManagementClient(new NetTcpBinding(SecurityMode.None), new EndpointAddress("net.tcp://example.com/MyApp/DatabaseManagement"));

生成されたサービスプロキシは、このオーバーロードによって、ポイントするバインディングとアドレスを自動的に取り込む必要があります。

于 2013-02-22T18:44:32.410 に答える