背景:
在普通的C#项目中,可以直接调用 WCF / Webservice;
在微软BI的 ssis中,有 webservice任务组件,也可以直接调用简单的 WCF / Webservice;
偶这边的情况是,后端的 WCF中用的反射,所以在 ssis中的webservice任务组件中,死活不能识别 WCF对应的方法。
所以只能在ssis的 script task组件中,用纯代码的方式来调用WCF服务。
就这样,可能还是有问题;可能会碰到 不能识别 System.ServiceModel节点的错误。根本原因在于 微软的ssis的script task组件中,它不能识别 WCF/ webservice的 app.config文件。
解决方法:除了添加服务引用外,还需要在代码中设置所有的属性,包括 URL
参考代码:
//HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();
HttpTransportBindingElement httpsTransport = new HttpTransportBindingElement();
httpsTransport.ManualAddressing = false;
httpsTransport.MaxBufferPoolSize = 524288;
httpsTransport.MaxReceivedMessageSize = 65536;
httpsTransport.AllowCookies = false;
httpsTransport.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
httpsTransport.BypassProxyOnLocal = false;
httpsTransport.DecompressionEnabled = true;
httpsTransport.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
httpsTransport.KeepAliveEnabled = true;
httpsTransport.MaxBufferSize = 65536;
httpsTransport.ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
httpsTransport.Realm = "";
httpsTransport.TransferMode = TransferMode.Buffered;
httpsTransport.UnsafeConnectionNtlmAuthentication = false;
httpsTransport.UseDefaultWebProxy = true;
//httpsTransport.RequireClientCertificate = false;
TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
encoding.MessageVersion = MessageVersion.Soap11;
encoding.WriteEncoding = Encoding.UTF8;
encoding.MaxReadPoolSize = 64;
encoding.MaxWritePoolSize = 16;
encoding.ReaderQuotas.MaxDepth = 32;
encoding.ReaderQuotas.MaxStringContentLength = 8192;
encoding.ReaderQuotas.MaxArrayLength = 16384;
encoding.ReaderQuotas.MaxBytesPerRead = 4096;
encoding.ReaderQuotas.MaxNameTableCharCount = 16384;
CustomBinding binding = new CustomBinding();
binding.Name = "GetData";
binding.Elements.Add(encoding);
binding.Elements.Add(httpsTransport);
EndpointAddress endPoint = new EndpointAddress("http://192.168.4.16:83/Service1.svc");
TestServiceRef.Service1Client svc = new TestServiceRef.Service1Client(binding, endPoint);
string sResult= svc.GetData(89);
结果: