WCF测试客户端应用程序是否存在已知限制?

时间:2009-02-20 21:46:29

标签: wcf wcf-client

这已经发生了几次让我知道。如果我将许多OperationContract添加到ServiceContract,WCF测试客户端应用程序会抛出异常:

“无法添加服务。可能无法访问服务元数据。请确保您的服务正在运行并公开元数据。”

详情继续:

错误:无法从中获取元数据。请求失败,HTTP状态为400:错误请求。

如果我删除了几个操作合同,那么一切都很好。测试客户端之外也没关系。

4 个答案:

答案 0 :(得分:1)

您是否可以更具体地说明您必须从服务合同中删除哪些类型的操作才能使其正常工作?

以下是.NET Framework 3.5 SDK附带的WcfTestClient.exe工具中的一些已知限制。请注意,所有这些问题都已在.NET 3.5 SP1附带的版本中得到修复。

  • 客户端未对调用的服务维护会话。所有调用都在新的代理实例上进行
  • 可以查看客户端代理的自动生成的配置文件,但不能编辑
  • 无法调用使用 XML序列化程序而非数据合约序列化程序的服务
  • 无法调用使用邮件合同的服务

答案 1 :(得分:0)

这是我必须添加到我的devenv.exe.config以使我的WCF测试客户端使用非常大的服务。然后我不得不重启我的IDE。这可能不是你想要的,但我希望它有所帮助。

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding name="MyBinding">
        <textMessageEncoding>
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </textMessageEncoding>
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/>
      </binding>
    </customBinding>
  </bindings>
  <client>
    <endpoint binding="customBinding" bindingConfiguration="MyBinding" contract="IMetadataExchange" name="http"/>
  </client>
</system.serviceModel>

答案 2 :(得分:0)

感谢您的回复。

这些是令人讨厌的行:

<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetJobSubTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of JobSubTypeOfJobTypeDTO)

<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetActivityTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of ActivityTypeOfJobTypeDTO)

事实证明我们在返回类型(DTO)和默认构造函数中缺少setter。

答案 3 :(得分:0)

这是我遇到过的最奇怪的问题之一。您可能需要检查代码并注意以下问题:

Private _NetPay As Boolean
<DataMember()> _
Public Property NetPay() As Boolean
    Get
        Return _Amount = 0
    End Get
    Set(ByVal value As Boolean)
        _NetPay = value
    End Set
End Property

我已经定义了如上所述的DataMember。请注意返回声明。它试图返回一个计算值。我删除了这个数据成员;它运作良好。