Can';在发送工作请求之前,请不要获取WCF WebCannelFactory

Can';在发送工作请求之前,请不要获取WCF WebCannelFactory,wcf,Wcf,第一个代码块返回一个良好的请求。第二个返回一个错误。请告知 第一个代码块返回有关客户的信息,并使用OAuth2。第二个块使用拦截器。问题是,当我使用WebChannelFactory并在跟踪中查看我的请求时,它显示(与一个好的请求相比)所有内容(请求的主体)都放在消息块中。在一个好的请求中,请求的主体被放入soap消息中 using System; using System.Collections.Generic; using System.Linq; using System.Net; usi

第一个代码块返回一个良好的请求。第二个返回一个错误。请告知

第一个代码块返回有关客户的信息,并使用OAuth2。第二个块使用拦截器。问题是,当我使用WebChannelFactory并在跟踪中查看我的请求时,它显示(与一个好的请求相比)所有内容(请求的主体)都放在消息块中。在一个好的请求中,请求的主体被放入soap消息中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading.Tasks;

namespace Ahcccs.Isd.Aes.Breaz.Core.WCF.SOAP
{
    public class ConsumeGetVendorLookup
    {
        public void Consume(string wso2token)
        {
            Header header = new Header();
            header.Type = "?";
            header.ReturnCode = "?";
            header.Requestor = "?";
            header.Recipient = "?";
            header.Date = "?";
            Requestor requestor = new Requestor();
            requestor.UserID = "";
            requestor.Password = "";

            header.Subject = requestor;

            Payload payload = new Payload();
            GetVendorCustomerIn getVendorCustomer = new GetVendorCustomerIn();
            getVendorCustomer.IncludeGeneralInfo = true;
            getVendorCustomer.IncludeHeadquarters = true;
            getVendorCustomer.IncludePrenote_EFT = true;
            getVendorCustomer.IncludePrenote_EFTSpecified = true;
            getVendorCustomer.Vendor_Customer = "{our customer number}";

            payload.GetVendorCustomerIn = getVendorCustomer;

            AdvMessage advMessage = new AdvMessage();
            advMessage.Header = header;
            advMessage.Payload = payload;

            GetVendorCustomer customer = new GetVendorCustomer();
            customer.AdvMessage = advMessage;

            VendorServicesClient wcfClient = new VendorServicesClient();
            var s = wcfClient.State;
            wcfClient.Open();

            using (new OperationContextScope(wcfClient.InnerChannel))
            {
                WebProxy wproxy = new WebProxy(new Uri("http://{our proxy server and port}"), true);
                wproxy.BypassProxyOnLocal = true;
                wproxy.UseDefaultCredentials = true;

                WebRequest.DefaultWebProxy = wproxy;

                // Add a HTTP Header to an outgoing request    
                HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                requestMessage.Headers["Authorization"] = " Bearer " + wso2token;

                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

                var result = wcfClient.getVendorCustomer(customer);
            }
        }
    }
}
这一个返回一个错误:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Web;
using System.Text;
using System.Threading.Tasks;

namespace Ahcccs.Isd.Aes.Breaz.Core.WCF.SOAP
{
    public class ConsumeGetVendorLookup
    {
        public void Consume(string wso2token)
        {
            Header header = new Header();
            header.Type = "?";
            header.ReturnCode = "?";
            header.Requestor = "?";
            header.Recipient = "?";
            header.Date = "?";
            Requestor requestor = new Requestor();
            requestor.UserID = "";
            requestor.Password = "";

            header.Subject = requestor;

            Payload payload = new Payload();
            GetVendorCustomerIn getVendorCustomer = new GetVendorCustomerIn();
            getVendorCustomer.IncludeGeneralInfo = true;
            getVendorCustomer.IncludeHeadquarters = true;
            getVendorCustomer.IncludePrenote_EFT = true;
            getVendorCustomer.IncludePrenote_EFTSpecified = true;
            getVendorCustomer.Vendor_Customer = "{our customer number}";

            payload.GetVendorCustomerIn = getVendorCustomer;

            AdvMessage advMessage = new AdvMessage();
            advMessage.Header = header;
            advMessage.Payload = payload;

            GetVendorCustomer customer = new GetVendorCustomer();
            customer.AdvMessage = advMessage;
            getVendorCustomerRequest customerReq = new getVendorCustomerRequest();
            customerReq.getVendorCustomer = customer;

            //VendorServicesClient wcfClient = new VendorServicesClient();
            //var s = wcfClient.State;
            //wcfClient.Open();

            var wcfClient = new WebChannelFactory<VendorServicesChannel>(
                new Uri("{the target uri}"));
            //var s = wcfClient.State;
            //wcfClient.Open();
            wcfClient.Endpoint.EndpointBehaviors.Add(new AuthenticationHeaderBehavior("txtUser", "txtPass", wso2token));

            //using (new OperationContextScope(wcfClient.InnerChannel))
            //{
            //    WebProxy wproxy = new WebProxy(new Uri("our proxy server and port"), true);
            //    wproxy.BypassProxyOnLocal = true;
            //    wproxy.UseDefaultCredentials = true;

            //    WebRequest.DefaultWebProxy = wproxy;

            //    // Add a HTTP Header to an outgoing request    
            //    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
            //    requestMessage.Headers["Authorization"] = " Bearer " + wso2token;

            //    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

            //    var result = wcfClient.getVendorCustomer(customer);
            //}

            var proxy = wcfClient.CreateChannel();
            using ((IDisposable)proxy)
            using (OperationContextScope c = new OperationContextScope((IContextChannel)proxy))
            {
                //WebProxy wproxy = new WebProxy(new Uri("our proxy server and port"), true);
                //wproxy.BypassProxyOnLocal = true;
                //wproxy.UseDefaultCredentials = true;
                //WebRequest.DefaultWebProxy = wproxy;
                //Add a HTTP Header to an outgoing request    
                //HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                //requestMessage.Headers["Authorization"] = " Bearer " + wso2token;

                //OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

                var result = proxy.getVendorCustomer(customerReq);
            }
        }
    }

    public class AuthenticationHeader : IClientMessageInspector
    {
        #region Implementation of IClientMessageInspector

        string itsUser;
        string itsPass;
        string itsToken;

        public AuthenticationHeader(string user, string pass, string token)
        {
            itsUser = user;
            itsPass = pass;
            itsToken = token;
        }

        public object BeforeSendRequest(ref Message request,
            IClientChannel channel)
        {
            //HttpRequestMessageProperty hrmp = request.Properties["httpRequest"] as HttpRequestMessageProperty;
            //string encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(itsUser + ":" + itsPass));
            //hrmp.Headers.Add("Authorization", "Basic " + encoded);
            //return request;

            //HttpRequestMessageProperty hrmp = request.Properties["httpRequest"] as HttpRequestMessageProperty;
            //hrmp.Headers.Add("Authorization", " Bearer " + itsToken);

            //HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
            //requestMessage.Headers["Authorization"] = " Bearer " + itsToken;

            //OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

            //return request;

            WebProxy wproxy = new WebProxy(new Uri("our proxy server and port"), true);
            wproxy.BypassProxyOnLocal = true;
            wproxy.UseDefaultCredentials = true;
            WebRequest.DefaultWebProxy = wproxy;

            //// Add a HTTP Header to an outgoing request    
            HttpRequestMessageProperty hrmp = request.Properties["httpRequest"] as HttpRequestMessageProperty;
            hrmp.Headers["Authorization"] = " Bearer " + itsToken;

            return request;
        }

        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            //Console.WriteLine("Received the following reply: '{0}'", reply.ToString());
        }
        #endregion
    }

    public class AuthenticationHeaderBehavior : IEndpointBehavior
    {
        #region Implementation of IEndpointBehavior

        readonly string itsUser;
        readonly string itsPass;
        readonly string itsToken;

        public AuthenticationHeaderBehavior(string user, string pass, string token)
            : base()
        {
            itsUser = user;
            itsPass = pass;
            itsToken = token;
        }

        public void Validate(ServiceEndpoint endpoint) { }

        public void AddBindingParameters(ServiceEndpoint endpoint,
            BindingParameterCollection bindingParameters) { }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint,
            EndpointDispatcher endpointDispatcher) { }

        public void ApplyClientBehavior(ServiceEndpoint endpoint,
            ClientRuntime clientRuntime)
        {
            clientRuntime.MessageInspectors.Add(new AuthenticationHeader(itsUser, itsPass, itsToken));
        }

        #endregion
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.ServiceModel;
使用System.ServiceModel.Channel;
使用System.ServiceModel.Description;
使用System.ServiceModel.Dispatcher;
使用System.ServiceModel.Web;
使用系统文本;
使用System.Threading.Tasks;
命名空间Ahcccs.Isd.Aes.Breaz.Core.WCF.SOAP
{
公共类ConsumerGetVendorLookup
{
公共void消费(字符串wso2token)
{
页眉=新页眉();
header.Type=“?”;
header.ReturnCode=“?”;
header.Requestor=“?”;
header.Recipient=“?”;
header.Date=“?”;
请求者请求者=新请求者();
requestor.UserID=“”;
请求者。密码=”;
header.Subject=请求者;
有效载荷=新的有效载荷();
GetVendorCustomerIn getVendorCustomer=新建GetVendorCustomerIn();
getVendorCustomer.IncludeGeneralInfo=true;
getVendorCustomer.IncludeHeadquarters=true;
getVendorCustomer.includeprepNote\u EFT=true;
getVendorCustomer.IncludePrepNote\u eftsSpecified=true;
getVendorCustomer.Vendor_Customer=“{我们的客户编号}”;
payload.GetVendorCustomerIn=getVendorCustomer;
AdvMessage AdvMessage=新的AdvMessage();
advMessage.Header=头;
advMessage.Payload=有效载荷;
GetVendorCustomer=新的GetVendorCustomer();
customer.AdvMessage=AdvMessage;
getVendorCustomerRequest customerReq=新建getVendorCustomerRequest();
customerReq.getVendorCustomer=客户;
//VendorServicesClient wcfClient=新的VendorServicesClient();
//var s=wcfClient.State;
//wcfClient.Open();
var wcfClient=新的WebChannel工厂(
新Uri(“{目标Uri}”);
//var s=wcfClient.State;
//wcfClient.Open();
wcfClient.Endpoint.EndpointBehaviors.Add(新的AuthenticationHeaderBehavior(“txtUser”、“txtPass”、wso2token));
//使用(新OperationContextScope(wcfClient.InnerChannel))
//{
//WebProxy wproxy=newwebproxy(新Uri(“我们的代理服务器和端口”),true);
//wproxy.BypassProxyOnLocal=true;
//wproxy.UseDefaultCredentials=true;
//WebRequest.DefaultWebProxy=wproxy;
////将HTTP头添加到传出请求
//HttpRequestMessageProperty requestMessage=新的HttpRequestMessageProperty();
//requestMessage.Headers[“Authorization”]=“Bearer”+wso2token;
//OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name]=requestMessage;
//var结果=wcfClient.getVendorCustomer(客户);
//}
var proxy=wcfClient.CreateChannel();
使用((IDisposable)代理)
使用(OperationContextScope c=新的OperationContextScope((IContextChannel)代理))
{
//WebProxy wproxy=newwebproxy(新Uri(“我们的代理服务器和端口”),true);
//wproxy.BypassProxyOnLocal=true;
//wproxy.UseDefaultCredentials=true;
//WebRequest.DefaultWebProxy=wproxy;
//将HTTP头添加到传出请求
//HttpRequestMessageProperty requestMessage=新的HttpRequestMessageProperty();
//requestMessage.Headers[“Authorization”]=“Bearer”+wso2token;
//OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name]=requestMessage;
var result=proxy.getVendorCustomer(customerReq);
}
}
}
公共类AuthenticationHeader:IClientMessageInspector
{
#IClientMessageInspector的区域实现
字符串及其用户;
字符串传递;
字符串及其标记;
公共AuthenticationHeader(字符串用户、字符串传递、字符串令牌)
{
itsUser=用户;
itsPass=通过;
itsToken=令牌;
}
发送请求之前的公共对象(参考消息请求,
IClientChannel(客户端通道)
{
//HttpRequestMessageProperty hrmp=request.Properties[“httpRequest”]作为HttpRequestMessageProperty;
//string encoded=System.Convert.ToBase64String(System.Text.Encoding.GetEncoding(“ISO-8859-1”).GetBytes(ITSUER+”:“+itsPass));
//添加(“授权”、“基本”+编码);
//返回请求;
//HttpRequestMessageProperty hrmp=request.Properties[“httpRequest”]作为HttpRequestMessageProperty;
//添加(“授权”、“持有人”+其令牌);
//HttpRequestMessageProperty requestMessage=新的HttpRequestMessageProperty();
//requestMessage.Headers[“Authorization”]=“Bearer”+其令牌;
//OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name]=requestMessage;
//返回请求;
WebProxy wproxy=newwebproxy(新Uri(“我们的代理服务器和端口”),true);
wproxy.BypassProxyOnLocal=true;
wproxy.UseDefaultCredentials=true;
WebReq