错误请求错误400 - WCF客户端

时间:2009-10-22 14:01:25

标签: c# wcf

我的IIS上运行了WCF Web服务。它从客户端获取数据并在数据库中插入。我的Web服务需要复杂数据类型播放器的对象。在客户端中,我创建了一个玩家对象,并将其传递给Web服务以进行工作。

在我的客户端控制台应用程序中

string strBaseAddress = ConfigurationSettings.AppSettings["WEBSERVICE"];
Uri baseAddress = new Uri(strBaseAddress);
WebServiceHost host = new WebServiceHost(typeof(TrialCenterAPI), baseAddress);
host.open
// Doing Work
host.close

此应用程序正常运行。

现在,当我通过添加服务引用来编写另一个客户端来执行相同的工作时。它每次都给我400个错误请求错误。

我创建了自动生成的API客户端对象,然后调用了适当的Web服务方法,并将Players的对象传递给它。我尝试谷歌搜索,我没有得到任何解决方案。,我增加了服务器和客户端Web配置中的最大大小。

客户端Web Config使用自定义绑定,如下所示:

<system.serviceModel>
      <bindings>
        <customBinding>
          <binding name="WebHttpBinding">
            <textMessageEncoding 
                 maxReadPoolSize="2147483647" 
                 maxWritePoolSize="2147483647"
                 messageVersion="None" writeEncoding="utf-8" >
              <readerQuotas maxDepth="2147483647" 
                     maxStringContentLength="2147483647" 
                     maxArrayLength="2147483647"
                     maxBytesPerRead="2147483647" 
                     maxNameTableCharCount="2147483647" />
            </textMessageEncoding>
            <httpTransport 
                 maxReceivedMessageSize="2147483647" 
                 maxBufferSize="2147483647"/>
          </binding>
        </customBinding>
      </bindings>
      <client>
          <endpoint name="WebHttpBinding"  
              address="Service Address/"
              binding="customBinding" 
              bindingConfiguration="WebHttpBinding"
              contract="TestClientAPI.API" />
      </client>
   </system.serviceModel>

任何帮助都将受到高度赞赏。

更新

我在msdn中发现了一个说

的线程

“这是Web编程模型本身的限制。与SOAP端点(即具有BasicHttpBinding,WSHttpBinding等的端点)不同,它们可以使用有关所有操作的信息来公开关于自身的元数据(WSDL或Mex)。在端点中的参数,目前没有标准方法来公开非SOAP端点的元数据 - 而这正是基于webHttpBinding的端点所在。简而言之,WCF测试客户端对基于Web的端点没有用处。当WCF发布其下一个版本时,会出现一些表示Web样式端点的标准,我们可能会更新测试客户端以支持它,但目前还没有广泛采用。

您可以尝试的一种替代方法(尽管绝对不是那么简单/方便)是使用ChannelFactory类在代码中自己创建测试客户端(使用服务中使用的相同合同/绑定/行为(请参阅下面的示例)。然后可以使用一些网络捕获/重放工具,如Fiddler(www.fiddlertool.com)向服务发送其他请求。“

链接是:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/deabd25b-a219-4e95-9826-d40dc2f75543

我正在寻找这个确切问题的解决方案。我可以使用ChannelFactory类或Fiddler来使用服务。我无法使用服务客户端。我想在WCF模型中这个问题仍然没有进展。

还有一件事,我在服务器的web.config或客户端的app.config中没有。我在Server Web.config中添加了这个,然后我得到了一个不同的错误“'System.ServiceModel.ClientBase`1'的类型初始化器引发了一个异常。”我也从配置中删除了webHttpBinding设置。

1 个答案:

答案 0 :(得分:4)

首先,webHttpBinding(REST风格)不使用任何这些设置 - 这些设置仅适用于基于SOAP的绑定,如wsHttpBindingbasicHttpBinding

对于WCF REST样式绑定,您需要确保IIS可以支持更大的传输 - 默认情况下,IIS max消息大小的值大于默认值。

检查你的web.config - 你有这样的条目吗?

<system.web>
     ......
     <httpRuntime maxRequestLength="32678"/>  
     ......
</system.web>

这是KB的限制 - 默认值为4096(4 MB) - 您可能需要将其增加到更高的值。

如果不是导致问题的邮件大小,那么您的服务可能会导致异常吗?你究竟在做什么?上传或下载文件或什么?

马克