2

System.Data.Services.IRequestHandler コントラクトでエンドポイントを作成しようとすると、次のエラーが発生します。

System.ServiceModel.Channels.Message 型のパラメーターまたは戻り値の型、または MessageContractAttribute と異なる型の他のパラメーターを持つ型があるため、操作 'ProcessRequestForMessage' を読み込むことができませんでした。System.ServiceModel.Channels.Message または MessageContractAttribute を持つ型を使用する場合、メソッドは他の型のパラメーターを使用してはなりません。

このエラーに関する他の 2 つの質問 ( hereおよびhere ) を見つけましたが、どちらにも満足のいく解決策はありませんでした。Northwind の例を引っ張ってきて、問題を再現できました。

簡略化された web.config ファイル:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <system.serviceModel>
    <services>
      <service  name="NorthwindService.Northwind">
        <endpoint address="http://localhost:12345/Northwind.svc" binding="basicHttpBinding" contract="System.Data.Services.IRequestHandler" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

.svc ファイル:

<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, Microsoft.Data.Services, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Service="NorthwindService.Northwind" %>

System.Data.Services.IRequestHandler コントラクトを独自のものに置き換え、エラー メッセージで問題となっているパラメーターを削除することで、エラーを取り除くことができます。

エラーをスローする組み込み ServiceContract:

namespace System.Data.Services
{
  [ServiceContract]
  public interface IRequestHandler
  {
    [OperationContract]
    [WebInvoke(UriTemplate = "*", Method = "*")]
    Message ProcessRequestForMessage(Stream messageBody);
  }
}

エラーをスローしない私のServiceContract(ただし、すべてのDataService<T>機能を複製しなかったため、実際には機能しません):

namespace NorthwindService
{
  [ServiceContract]
  interface Interface1
  {
    [OperationContract]
    [WebInvoke(UriTemplate = "*", Method = "*")]
    Message ProcessRequestForMessage();
  }
}

組み込みの ServiceContract をエンドポイントで使用しようとすると、なぜこのエラーがスローされるのか混乱しています。私は Data Services にかなり慣れていないので、他の人には明らかな何かが欠けていると確信しています。

ありがとう

編集:
結局のところ、私の目標は証明書認証を使用することなので、この問題を回避しながらそれを行う方法があれば、私はそれを受け入れます。私はこのを使用しています。

4

1 に答える 1

0

を使用してbasicHttpBindingいます。に変更しwebHttpBindingます。

于 2013-02-03T10:54:46.540 に答える