誰かが私を助けてくれることを願っています。私はしばらく C# でプログラミングしていません。答えは簡単だと思いますが、頭がわかりません。
System.Web.Services.Protocols.SoapHttpClientProtocol を呼び出す次のものがあります。私が持っている多くの呼び出しの 1 つだけを含めました。
public partial class ExchangeService : System.Web.Services.Protocols.SoapHttpClientProtocol {
//Lots of code using Soap
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("getDetailsLite", RequestNamespace="http://www.MySite.com/ExchangeService/", ResponseNamespace=" http://www.MySite.com/ExchangeService/", ", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("Result", IsNullable=true)]
public GetDetailsLiteResp getDetailsLite(getDetailsLiteReq request) {
object[] results = this.Invoke("getDetailsLite", new object[] {
request});
return ((getDetailsLiteResp)(results[0]));
}
public void getDetailsLiteAsync(getDetailsLiteReq request) {
this. getDetailsLiteAsync(request, null);
}
public void getDetailsLiteAsync (getDetailsLiteReq request, object userState) {
if ((this.getDetailsLiteOperationCompleted == null)) {
this.getDetailsLiteOperationCompleted = new System.Threading.SendOrPostCallback(this.OngetDetailsLiteOperationCompleted);
}
this.InvokeAsync("getDetailsLite", new object[] {
request}, this. getDetailsLiteOperationCompleted, userState);
}
}
SoapHttpClientProtocol が呼び出す WebRequest をオーバーライドしたいと考えています。SoapHttpClientProtocol は次のようになります (System.Web.Services.dll から呼び出されると思います)。
namespace System.Web.Services.Protocols {
public class SoapHttpClientProtocol : HttpWebClientProtocol {
public SoapHttpClientProtocol();
public SoapProtocolVersion SoapVersion { get; set; }
protected IAsyncResult BeginInvoke(string methodName, object[] parameters, AsyncCallback callback, object asyncState);
public void Discover();
protected object[] EndInvoke(IAsyncResult asyncResult);
protected virtual XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize);
//This line is the one i am talking about
protected override WebRequest GetWebRequest(Uri uri);
protected virtual XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize);
protected object[] Invoke(string methodName, object[] parameters);
protected void InvokeAsync(string methodName, object[] parameters, SendOrPostCallback callback);
protected void InvokeAsync(string methodName, object[] parameters, SendOrPostCallback callback, object userState);
}
}
次のようにするには、オーバーライド WebRequest GetWebRequest(Uri uri ) を保護する必要があります。
protected override WebRequest GetWebRequest(Uri uri) {
HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
webRequest.KeepAlive = false;
webRequest.ProtocolVersion=HttpVersion.Version10;
return webRequest;
}
誰も私がこれを行う方法を知っていますか? SoapHttpClientProtocol 内で直接編集することはできませんが、99% 確実に行うべきではありません。
あなたが提供できるかもしれない助けをありがとう