4

私は WCF サービスを持っています。MSTest プロジェクトから参照を作成しました。サービスメソッドを呼び出す方法の例を次に示します。

IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
    .CreateChannel(new BasicHttpBinding(),
                   new EndpointAddress("http://localhost/EnrollmentService.svc"));

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

実行する代わりに、次のエラーが発生しました。

コンテンツ タイプ application/xml。応答メッセージの charset=utf-8 がバインディングのコンテンツ タイプ (text/xml; charset=utf-8) と一致しません。カスタム エンコーダーを使用する場合は、IsContentTypeSupported メソッドが適切に実装されていることを確認してください。応答の最初の 710 バイトは次のとおりです。Sendera:ActionNotSupportedアクション '' のメッセージは、EndpointDispatcher での ContractFilter の不一致により、受信側で処理できません。これは、コントラクトの不一致 (送信者と受信者の間のアクションの不一致) または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインディング (メッセージ、トランスポート、なしなどのセキュリティ要件を含む) を持っていることを確認してください。---> System.Net.WebException: リモート サーバーがエラーを返しました: (500) 内部サーバー エラー..

私が理解している限りでは、ContractFilter と EndpointDispatcher の間にはいくつかの問題があります。私はググろうとしましたが、理解できるものは何も見つかりませんでした...

また、別の方法で wcf サービス メソッドを呼び出そうとしました。

EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

それは私に別のエラーを返します:

ServiceModel クライアント構成セクションで、名前が ' http://localhost/McActivation/EnrollmentService.svc ' でコントラクトが 'EnrollmentServiceReference.IEnrollmentService' のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、この名前に一致するエンドポイント要素が client 要素に見つからなかったためである可能性があります。

質問1:

wcfサービスクライアントをインスタンス化する正しい方法は何ですか?

質問 2:

私の場合、何が問題なのですか?

どうもありがとう。

PS WcfTestClient を使用してサービスに接続できる問題がいくつかあります。詳細は次のとおりです。 WCF サービス: 'WebHttpBinding' エンドポイントを介してメソッドを呼び出すことはできません

PPS サーバー側の WCF サービス構成は次のとおりです。

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
4

1 に答える 1

8

あなたの問題はこれです:あなたのサービス構成はエンドポイントを定義しwebHttpBindingます-それはREST (「Xml-over-HTTP」)エンドポイントです....

しかし、あなたのクライアントは を使用してbasicHttpBindingおり、これはSOAPバインディングです - これらは互換性がありません!

これを変更して、サービス側によって提供されるサービス エンドポイントが、クライアントが接続できるものであることを確認する必要があります。

そう:

  • を使用してサービス構成に別のエンドポイントを追加し、basicHttpBindingそのエンドポイントに接続します。

また:

  • クライアント側を変更して使用するwebHttpBinding
于 2011-01-10T17:11:09.927 に答える