コンソールアプリケーションでいくつかのWebサービスをホストするために使用されているWebServiceHostがあります。私は私のクライアントアプリで、それにサービス参照を追加し、そうのようなプロキシを作成:[OperationContract]メソッドで複数のパラメータが使用されていると、WCFサービスプロキシが例外をスローします
var binding = new WebHttpBinding();
var endPoint = new EndpointAddress(string.Format(Settings.serviceBase, Settings.wcfPort));
ChannelFactory<IzWaveSVC> factory = new ChannelFactory<IzWaveSVC>(new WebHttpBinding(), endPoint);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
// **Exception occurs here**
var proxy = (IzWaveSVC)factory.CreateChannel();
それは動作しますが、私は複数のパラメータを必要とする新しい方法を追加したら、私はときにプロキシこの例外を取得し始めました(任意の通信も行われた前にこれがあった)に作成されました:
Operation 'setDeviceState' of contract 'IzWaveSVC' specifies multiple request
body parameters to be serialized without any wrapper elements. At most one
body parameter can be serialized without wrapper elements. Either remove the
extra body parameters or set the BodyStyle property on the WebGetAttribute/
WebInvokeAttribute to Wrapped.
WebInvokeAttributeを追加してラップにbodyStyle属性を設定しても効果はありません。
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
bool setDeviceState(byte nodeId, bool powered, byte level);
私は他の方法もありますが、それらは単一のパラメータしか持たないので、上記の問題はありません。すべてのヘルプは高く評価され
endPoint = new EndpointAddress(string.Format(Settings.serviceBase, port));
binding = new WebHttpBinding();
host = new WebServiceHost(singletonObject, new Uri(string.Format(Settings.serviceBase, port)));
host.AddServiceEndpoint(typeof(IzWaveSVC), binding, "");
ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior();
mexBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(mexBehavior);
host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), endPoint.Uri.AbsoluteUri + "mex");
host.Open();
:
ちょうどFYI、ここではどのように私のセットアップホストです。
ありがとうございます!
こんにちは、私の目が正しく動作していない可能性があります。しかし、私はあなたがこのメソッドをどのように呼び出すのか分かりません。メソッドを呼び出す方法についてコードを投稿できますか? –
@Alex - メソッドを呼び出すと、クライアントからsetDeviceStateを呼び出すと言っていますか?それがあなたが意味するものなら、私はそれを呼び出すチャンスも得られません。呼び出しが行われる前に、サービスへのプロキシを設定する際にエラーが発生します。 – bugfixr
私はサービスを作成しましたが、単一のパラメータがそれを消費しました。次に、同じパラメーターを使って同じメソッドを追加し、それを消費することができました。クライアントからサービスを削除してもう一度追加しようとしました –