背景:

在普通的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);


结果:

微软 BI  ssis 中的 script task中用代码直接调用 WCF / Webservice_c#