c# 利用svcutil.exe 后端调用 WCF

2021-04-26 12:26

阅读:580

标签:pre   data   ann   tran   blog   creates   instance   x64   net   

1. 在visual studio安装目录下找到 Visual Studio Tools

技术分享图片

 

2. 以管理员身份运行 “VS2013 x64 兼容工具命令提示” (如果安装的32位VS,运行 x86的)

技术分享图片

3. 执行命令(在服务地址后加上 ?wsdl):svcutil.exe http://localhost:8091/PatientService.svc?wsdl

4. 可以看到生成了两个文件

技术分享图片

 

5. 根据目录找到这个文件,将.cs文件拷贝到项目中

6. 新建WcfChannelFactory类

 1 public static class WcfChannelFactory
 2     {
 3         #region WCF服务工厂
 4         public static T CreateServiceByUrl(string url)
 5        {
 6            return CreateServiceByUrl(url, "basicHttpBinding");
 7        }
 8  
 9        public static T CreateServiceByUrl(string url, string bing)
10        {
11            try
12            {
13                if (string.IsNullOrEmpty(url)) throw new NotSupportedException("This url is not Null or Empty!");
14                EndpointAddress address = new EndpointAddress(url);
15                Binding binding = CreateBinding(bing);
16                ChannelFactory factory = new ChannelFactory(binding, address);
17                return factory.CreateChannel();
18            }
19            catch (Exception ex)
20            {
21                throw new Exception("创建服务工厂出现异常.");
22            }
23        }
24        #endregion
25  
26        #region 创建传输协议
27        /// 
28        /// 创建传输协议
29        /// 
30        /// 传输协议名称
31        /// 
32        private static Binding CreateBinding(string binding)
33        {
34            Binding bindinginstance = null;
35            if (binding.ToLower() == "basichttpbinding")
36            {
37                BasicHttpBinding ws = new BasicHttpBinding();
38                ws.MaxBufferSize = 2147483647;
39                ws.MaxBufferPoolSize = 2147483647;
40                ws.MaxReceivedMessageSize = 2147483647;
41                ws.ReaderQuotas.MaxStringContentLength = 2147483647;
42                ws.CloseTimeout = new TimeSpan(0, 30, 0);
43                ws.OpenTimeout = new TimeSpan(0, 30, 0);
44                ws.ReceiveTimeout = new TimeSpan(0, 30, 0);
45                ws.SendTimeout = new TimeSpan(0, 30, 0);
46  
47                bindinginstance = ws;
48            }
49            else if (binding.ToLower() == "nettcpbinding")
50            {
51                NetTcpBinding ws = new NetTcpBinding();
52                ws.MaxReceivedMessageSize = 65535000;
53                ws.Security.Mode = SecurityMode.None;
54                bindinginstance = ws;
55            }
56            else if (binding.ToLower() == "wshttpbinding")
57            {
58                WSHttpBinding ws = new WSHttpBinding(SecurityMode.None);
59                ws.MaxReceivedMessageSize = 65535000;
60                ws.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.Windows;
61                ws.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;
62                bindinginstance = ws;
63            }
64            return bindinginstance;
65  
66        }
67        #endregion
68     }  

7. 用法:

string url = "http://localhost:9090/PatientService.svc";//WebConfig.WCFServiceUrl;
IPatientService proxy = WcfChannelFactory.CreateServiceByUrl(url);
string getdata = proxy.GetData(123);
IPatientService为自动生成的cs文件中的接口,其中包含了wcf服务中的方法

c# 利用svcutil.exe 后端调用 WCF

标签:pre   data   ann   tran   blog   creates   instance   x64   net   

原文地址:http://www.cnblogs.com/paopaohui/p/7885702.html


评论


亲,登录后才可以留言!