使用WCF代理将服务引用(WCF,VS2008)添加到外部服务

时间:2010-11-05 09:13:04

标签: proxy reference wcf

我使用VS2008,.net 3.5。

有一个外部Web服务(它是PHP实现,但不介意实现-.net,java,php,...-)。

在我的项目csproj中,我想添加对WebService的服务引用,我想使用WCF。

当我在VS2008中添加服务引用时,会创建WCF代理。

添加服务引用(外部服务)的任何最佳实践(模式和实践)?

WCF代理生成器(我认为相同的svcutil命令)生成这样的源代码。管理生成的代码可能会很有趣(ServiceContractAttribute Namespace =“http://192.168.50.63/WebService”使用IP地址,而OperationContractAttribute(Action =“http://devservername/webservice/SmoBridge.php/login”使用servername) )。

  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://192.168.50.63/WebService", ConfigurationName="ServiceEasyVista.WebServicePortType")]
public interface WebServicePortType {

    [System.ServiceModel.OperationContractAttribute(Action="http://devservername/webservice/SmoBridge.php/login", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, Use=System.ServiceModel.OperationFormatUse.Encoded)]
    [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
    string login(string SESSION_ID, [System.ServiceModel.MessageParameterAttribute(Name="LOGIN")] string LOGIN1, string PASSWORD, string COMPANY_ACCOUNT);

更新

Erwyn关于正确关闭故障WCF频道的建议。 http://bloggingabout.net/blogs/erwyn/archive/2006/12/09/WCF-Service-Proxy-Helper.aspx

为什么ClientBase Dispose需要抛出故障状态? (或者,关闭和中止之间有什么区别?)

http://social.msdn.microsoft.com/forums/en-US/wcf/thread/b95b91c7-d498-446c-b38f-ef132989c154/

2 个答案:

答案 0 :(得分:1)

检查一下:

http://www.sanity-free.com/125/php_webservices_and_csharp_dotnet_soap_clients.html

我认为这是一种复杂的技术。

此致

Mazhar Karimi

答案 1 :(得分:1)

我不知道为什么在添加引用时会有任何特定的最佳实践。话虽如此,Visual Studio中的“刷新参考”命令(右键单击现有服务引用)有时不能很好地工作,因此手动使用svcutil命令会更容易,并且有一个解决方案中更新服务引用的.bat文件(svcutil是“添加服务引用”在幕后使用的内容)。

此外,如果您引用的服务正在返回一个数组,您可以让WCF自动将其转换为通用列表(或其他类型) - 这可能会使事情变得更容易。