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