我使用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/
答案 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自动将其转换为通用列表(或其他类型) - 这可能会使事情变得更容易。