我知道这已经发生过几次了。如果我将许多 OperationContract 添加到 ServiceContract,WCF 测试客户端应用程序会引发异常:
“添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。”
在详细信息中,它继续:
错误:无法从 获取元数据。请求失败,HTTP 状态为 400:错误请求。
如果我删除了几个运营合同,那么一切都很好。在测试客户端之外也很好。
我知道这已经发生过几次了。如果我将许多 OperationContract 添加到 ServiceContract,WCF 测试客户端应用程序会引发异常:
“添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。”
在详细信息中,它继续:
错误:无法从 获取元数据。请求失败,HTTP 状态为 400:错误请求。
如果我删除了几个运营合同,那么一切都很好。在测试客户端之外也很好。
您能否更具体地说明您必须从服务合同中删除哪些操作才能使其正常工作?
以下是.NET Framework 3.5 SDK 附带的WcfTestClient.exe工具中的一些已知限制。请注意,所有这些问题都已在 .NET 3.5 SP1 附带的版本中得到修复。
这是我必须添加到我的 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>
感谢您的回复。
这些是有问题的行:
<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) 和默认构造函数中缺少设置器。
这是我遇到的最奇怪的问题之一。您可能需要检查您的代码并注意以下问题:
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。注意返回语句。它试图返回一个计算值。我删除了这个数据成员;它工作得很好。