1 つのメソッドがすべての要求をキャッチする WCF サービスを作成しようとしています。スタンドアロンの実行可能ファイル内でホストすることを計画してください。契約は次のとおりです。
[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, AddressFilterMode = AddressFilterMode.Any)]
public class Proxy
{
[WebInvoke(UriTemplate = "*", Method = "*")]
public string Test(Stream input)
{
return "Test";
}
}
ホスティングコードは次のとおりです。
static void Main(string[] args)
{
var uri = new Uri("http://localhost:2535/");
var binding = new WebHttpBinding();
var host = new ServiceHost(new Proxy(), uri);
host.AddServiceEndpoint(typeof(Proxy), binding, uri);
host.Open();
Console.ReadKey();
}
しかし、ブラウザを に向けると、localhost:2535
サービスに関する情報と、メタデータが有効になっていないという事実が表示されます。そして、localhost:2535/bla-bla-bla/
エラーのようなものが発生すると:
アクション '' のメッセージは、EndpointDispatcher での ContractFilter の不一致により、受信側で処理できません。これは、コントラクトの不一致 (送信者と受信者の間のアクションの不一致) または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインド (メッセージ、トランスポート、なしなどのセキュリティ要件を含む) を持っていることを確認します。
率直に言って、何が欠けているのかわかりません... 正しい軌道に戻るのを手伝ってくれてとても感謝しています。
編集:WebHttpBehavior
エンドポイントに動作を明示的に追加することで解決しました。結果のコードは次のようになります。
static void Main(string[] args)
{
var uri = new Uri("http://localhost:2535/");
var binding = new WebHttpBinding();
var host = new ServiceHost(new Proxy(), uri);
host.AddServiceEndpoint(typeof(Proxy), binding, uri).Behaviors.Add(new WebHttpBehavior());
host.Open();
Console.ReadKey();
}
なぜそのように機能するのか、より詳細な説明をまだ探しています...