0

「サービス参照の追加...」を使用して参照を追加したプロジェクトでWCFサービスを使用しています。ServiceClientエンティティとインターフェイスを使用してクリーンなプロキシを生成することを期待していました。代わりに、OperationContractメソッドごとにMethodNameRequest、MethodNameRequestBody、MethodNameResponse、MethodNameResponseBodyエンティティが作成されていることがわかります。

したがって、サービスメソッドを呼び出すときに、プロキシはメソッドの入力パラメータをRequestBodyのプロパティとして持つMethodNameRequestのインスタンスをサービスメソッドに渡します。以下のパラメーターを受け入れないAboutInformationGet()メソッドの呼び出しの例を参照してください。

        public WCFDynamicInvocation.PostingService.AboutModel AboutInformationGet() {
        WCFDynamicInvocation.PostingService.AboutInformationGetRequest inValue = new WCFDynamicInvocation.PostingService.AboutInformationGetRequest();
        inValue.Body = new WCFDynamicInvocation.PostingService.AboutInformationGetRequestBody();
        WCFDynamicInvocation.PostingService.AboutInformationGetResponse retVal = ((WCFDynamicInvocation.PostingService.IMIGQPosting)(this)).AboutInformationGet(inValue);
        return retVal.Body.AboutInformationGetResult;
    }

この動作は、Webサービスプロキシで見られると予想される動作だと思います。したがって、WCFサービスが適切に構成されていない可能性があります。

ここの誰かがこの問題に直面しましたか?生成されたプロキシがWCFサービスと同様になるように、サービスで行われる変更は何でしょうか。

乾杯。

4

2 に答える 2

0

しばらくこれに苦労した後、プロキシのメッセージ コントラクトの原因は、サービス インターフェイスに次の属性があることが最終的にわかりました。

[XmlSerializerFormat(Use = OperationFormatUse.Literal, Style = OperationFormatStyle.Document)]

私が理解しているように、[MessageContract(IsWrapped = false)] のラップを避けるために、次の属性で DataContracts を装飾することができます。

ただし、OperationContract が変更されていないため、応答は引き続きラップされます。

WCF の既定の DataContractSerializer の代わりに XMLSerializer を使用する必要は特にないので、XmlSeralizerFormat の装飾を削除します。

于 2013-02-25T22:48:54.577 に答える
0

ここに同様の投稿があります。

サービス参照を右クリック -> サービス参照の構成... -> [常にメッセージ コントラクトを生成する] チェック ボックスがオンになっているかどうかを確認します。チェックを外し、[OK] をクリックしてプロキシを再生成し、通常のプロキシが得られるかどうかを確認します。

于 2013-02-22T21:18:43.437 に答える