zoukankan      html  css  js  c++  java
  • c# Webservice 生成代理类并在客户端调用

    生成:

    VS2005命令:

    开始》运行》CMD

    C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin>wsdl /language:c# /n:XYS.MISS.Photo.PhotoAdmin /out:d:\Temp\TestService.cs D:\Temp\TestService.wsdl

    在d:/Temp下就会产生一个TestService.cs 文件

    默认为C#语言

    /language:VB 为输出语言

    /n:mynamespace namespace

    /out:myProxyClass.cs 输出文件名

    注意:D:\Temp\TestService.wsdl 是wsdl路径,可以是url路径:http://localhost/Temp/Test.asmx?wsdl

    VS2008命令:

    Microsfot visual studeio 2008》Visual Studio Tools》D:\Program Files\Microsoft Visual Studio 9.0\VC>

    svcutil.exe http://localhost:1101/UpdateService.svc /serializer:DataContractSerializer

    在D:\Program Files\Microsoft Visual Studio 9.0\VC 文件夹下自动生成一个UpdateService.cs文件和output.config文件,把output.config对应结点

    <system.serviceModel>下的内容copy到要调用服务的web.config下面即可

    或者:

    svcutil.exe http://localhost:1101/UpdateService.svc /serializer:DataContractSerializer /out:D:\LabWorkSpace\UpdateService.cs /config:D:\LabWorkSpace\WcfProxy\app.config /namespace:*,MyNamespace.UpdateService

             说明:
                  参数:  “D:\LabWorkSpace\UpdateService.cs”   ,是指生成的代理类输出存放到的地址
                  参数:  “D:\LabWorkSpace\WcfProxy\app.config”   ,是指存放到调用WCF服务程序目录下的配置文件的输出存放地址
                  参数:  “http://localhost:1101/UpdateService.svc”   ,是指部署到IIS 的WCF服务的地址
                  参数:  “/namespace:*,MyNamespace.UpdateService”   ,是指修改生成的代理服务类的命名空间(另外设置命名空间主要是为了防止多个代理类有时候同时包含有同名model模型的情况,相同名称的model会导致编译这些代理类的时候报错)

    PS:

    调用WebService很多人喜欢直接添加Web引用,事实上,如果你的项目里只有一个Web服务那么可能不会出现什么问题,但是如果你的项目里引用两个以上的Web服务,并且这两个服务里可能存在相同的类名,这时候可能就会出现问题。比较保险的办法就是用代理类的方式,把多个服务中相同的部分合并起来。

    调用:

    把TestService.cs 方法拷贝到项目中并可以调用,在Default.cs代码中调用:

    XYS.MISS.Photo.PhotoAdmin aa = new XYS.MISS.Photo.PhotoAdmin();  //根据生成代码类时设定的名称空间下找到类,并实例化
    string hospitalName=actionPhoto.GetHospitalName(); //调用webService代理类中的方法

    说明:并且可以动态配置WebService地址,比如以下是代理类:

    public partial class WebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
            private System.Threading.SendOrPostCallback HelloWorldOperationCompleted;
            /// <remarks/>
            public WebService() {
                this.Url = Class1.websvUrl+"/WebService.asmx";   //构造函数中,这里可以动态配置WebServiceUrl地址
            }
            /// <remarks/>
            public event HelloWorldCompletedEventHandler HelloWorldCompleted;
            /// <remarks/>
            [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/HelloWorld", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
            public string HelloWorld() {
                object[] results = this.Invoke("HelloWorld", new object[0]);
                return ((string)(results[0]));
            }
    }

    wsdl工具

  • 相关阅读:
    C#中Dictionary<TKey,TValue>排序方式
    反射之取类中类的属性、变量名称及其值
    程序测试用的IE浏览器第二次无法加载入口程序的问题及其解决方法
    使用Windows Form 制作一个简易资源管理器
    如何查看自制词典的执行效率
    cocos2dx 3.12 eclipse编辑器切换到Android Studio
    Cordova安装使用
    Activity的启动模式
    踩坑集锦——MVC权限验证
    设计模式学习之路——策略模式
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/1736728.html
Copyright © 2011-2022 走看看