1

WCF サービスを Web サービス クライアントとしても実行することは可能ですか?

これが可能である場合、構成ファイルでクライアント設定を構成する方法について、いくつかのガイダンスを提供してもらえますか?

私が抱えている主な問題は、大きなメッセージをメインの REST サービスに送信していることです。そのメッセージがセカンダリ サービスに中継されると、応答によって "MaxReceivedMessage" が大きすぎるエラーが発生するようです。REST サービスの CLIENT 設定を構成しようとしましたが、成功しませんでした。

app.config と web.config のどちらで定義しますか?

CLIENT 設定をどこで宣言してもバインディングが無視されるため、間違っているようです。

これは、REST サービスの APPLICATION 構成です。

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IBBIImageWarpService" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8080/BBIImageWarp" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IBBIImageWarpService"
                contract="ServiceReference1.IBBIImageWarpService" name="BasicHttpBinding_IBBIImageWarpService" />
        </client>
    </system.serviceModel>
</configuration>

失敗している私のRESTサービスのエンドポイントメソッドは次のとおりです。

        public ServiceResponse<DataContracts.BBIImgObject> WarpImage(DataContracts.BBIImgObject imgObject)
        {
            try
            {

                writeMessage("converting to JSON");

                string JSON = new JavaScriptSerializer().Serialize(imgObject);

                BasicHttpBinding binding = new BasicHttpBinding();

//このバインドに MAXRECEIVEDMessageSize を追加する必要がありますか???

                EndpointAddress address = new EndpointAddress("http://localhost:8080/BBIImageWarp");

                ServiceReference1.BBIImageWarpServiceClient ImgWarpSvc = new ServiceReference1.BBIImageWarpServiceClient(binding, address);

                string rslt = ImgWarpSvc.WarpImageJSON(JSON);

                DataContracts.BBIImgObject cloneImgObject = new DataContracts.BBIImgObject();
                cloneImgObject.Base64EncodedImageData = rslt;
                cloneImgObject.BodyTypeID = imgObject.BodyTypeID;

                return new ServiceResponse<DataContracts.BBIImgObject>(String.Empty, ServiceResponse<DataContracts.BBIImgObject>.ResponseTypeEnum.BbiSuccess, cloneImgObject);
            }
            catch (Exception ex)
            {
                writeMessage(ex.Message);
                return new ServiceResponse<DataContracts.BBIImgObject>(ex.Message, ServiceResponse<DataContracts.BBIImgObject>.ResponseTypeEnum.BbiFailure, null);
            }
        }
4

1 に答える 1

1

同じバイナリを使用して簡単にクライアントを作成できます

  1. サービス クラスの DLL をクライアント プロジェクトに含めます。
  2. サービス インターフェイスからチャネル ファクトリを作成します。
  3. チャネル ファクトリを使用します。

要件に応じた詳細については、 http://msdn.microsoft.com/en-us/library/ms576132( v=vs.110 ).aspx を参照してください。

最大受信エラーについては、次のことを行う必要があります: 受信メッセージの最大メッセージ サイズ クォータ (65536) ....クォータを増やすには、MaxReceivedMessageSize プロパティを使用します。

またはコードから:

WebHttpBinding binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = 2147483647;

同様に、クライアント側でも。

于 2014-09-15T15:00:58.090 に答える