1

是否可以让 WCF 服务也作为 Web 服务客户端执行?

如果这是可能的,你能给我一些关于如何在配置文件中配置客户端设置的指导吗?

我遇到的主要问题是我正在向我的主要 REST 服务发送大消息。当该消息被中继到辅助服务时,响应似乎触发了“MaxReceivedMessage”过大错误。我尝试为我的 REST 服务配置 CLIENT 设置,但没有成功。

我在 app.config 或 web.config 中定义哪个配置?

似乎我做错了,因为无论我在哪里声明客户端设置,绑定都会被忽略。

这是我的 REST 服务的应用程序配置。

<?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 回答