2010-06-06 84 views
1

我有一个简单的WCF服务,自托管和.net客户端。我使用svcutil生成代理。当我将代理添加到客户端时,它会要求我添加System.ServiceModel.dll。那么,我可以添加它,因为它是一个测试场景,我在.Net平台上工作。WCF - 跨平台问题

但是,假设我使用不支持.Net的机器,该平台将如何补偿System.ServiceModel?

您能否介绍一下它?

编辑:我有点想法。如果我创建WCF客户端,我需要添加ServiceModel。测试它我添加了一个ASMX客户端(添加Web引用)。我的服务方式不采取任何参数。但是我在客户端得到一个错误,要求我输入int Result,out bool ResultSpecified。你能否请exlain为什么?

编辑:能否请你点我一个例子 - 如何和什么有关“DataContractSerializer的”设置为true

感谢

Lijo

回答

1

它会抛出一个异常补偿。您需要需要安装.NET框架以运行.NET应用程序。对于跨平台你可以看看Mono


对不起,我误解了你的问题。如果使用basicHttpBinding公开端点,则任何符合WS-I Basic Profile 1.1的客户端都将能够毫无问题地使用Web服务。这是最具互操作性的绑定。

+0

我已经在使用binding =“basicHttpBinding”,但客户端仍然要求我添加SYstem.ServiceModel。 – Lijo 2010-06-06 09:11:27

+0

你在用什么客户?什么语言/平台?如果它是一个使用'svcutil'生成的.NET客户端,当然它会询问'System.ServiceModel'(请参阅编辑前的答案)。如果它是仅安装了.NET 2.0的机器,而不是.NET 3.0或更高版本,则可以使用'wsdl.exe'生成客户端代理。 – 2010-06-06 09:14:39

+0

我有点想法。如果我创建WCF客户端,我需要添加ServiceModel。测试它我添加了一个ASMX客户端(添加Web引用)。我的服务方式不采取任何参数。但我得到一个错误,在客户端要求我输入int 结果,出bool ResultSpecified。你能否请exlain为什么? – Lijo 2010-06-06 09:34:37

2

奇怪的问题。如果客户端不是.NET应用程序,则显然不需要System.ServiceModel。可以使用应用程序使用的任何语言的任何其他SOAP库来编写客户端。

1

我认为这里有两个问题:

  1. 如果你是自托管服务,但你想使用.NET来访问它没有内置的客户端,那么也许你应该考虑收留了它而不是在IIS内。或者,您需要确保您的托管应用程序还包含元数据绑定(MEX),以便非.NET平台可以访问WSDL。

  2. 如果您正在构建非.NET客户端,那么您将使用该平台的一组工具或框架。在这种情况下,您可以使用不同的工具从WSDL为您的服务创建代理。

希望有所帮助。

1

要消除在Web服务代理中生成的两个输出参数的需要,请在操作合同上使用[XmlSerializerFormat]属性。重新生成代理后,方法签名应该与您的定义匹配,而不是将您的返回类型转换为数据类型“Result”和指示返回变量是否存在的“ResultSpecified”。