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 にかなり慣れていないので、他の人には明らかな何かが欠けていると確信しています。
ありがとう
編集:
結局のところ、私の目標は証明書認証を使用することなので、この問題を回避しながらそれを行う方法があれば、私はそれを受け入れます。私はこの例を使用しています。