[英]Why isn't my C# Soap Extension getting called?
I have a C# Winforms client that called a Java web service. 我有一个称为Java Web服务的C#Winforms客户端。 The service gets invoked correctly and returns the expected results.
该服务被正确调用并返回预期结果。
I've been trying until I'm blue in the face to add a Soap Extension. 我一直在尝试直到脸色苍白以添加Soap Extension。 It compiles correctly, I have every reason to believe it's getting registered ... but it never gets called.
它可以正确编译,我有充分的理由相信它正在被注册……但从未被调用。 I tried modifying app.config;
我尝试修改app.config; I tried calling "wss.SoapExtensionTypes.Add(soapInterceptor)": same thing.
我尝试调用“ wss.SoapExtensionTypes.Add(soapInterceptor)”:同样的事情。 My SoapException's "Initalize()" and "ProcessMessage()" functions are simply never getting called.
我的SoapException的“ Initalize()”和“ ProcessMessage()”函数根本就不会被调用。
Q: Any suggestions? 问:有什么建议吗? Any debugging tips?
有调试提示吗?
ClientTraceExtension.cs => ClientTraceExtension.cs =>
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Services.Configuration;
using System.IO;
using System.Net;
using System.Reflection;
using System.Security.Permissions;
using GITSearchClient.ServiceReference1;
/*
* REFERENCE:
* http://msdn.microsoft.com/en-US/library/system.web.services.protocols.soapextension%28v=vs.90%29.aspx
*/
namespace GITSearchClient
{
public class ClientTraceExtension : SoapExtension
{
private Stream oldStream;
private Stream newStream;
private string filename = "c:\\temp\\soap_result.txt";
// Custom SoapExtension must override: ChainStream, GetInitializer()x2, Initialize() and ProcessMessage()
public override Stream ChainStream(Stream stream)
{
oldStream = stream;
newStream = new MemoryStream();
return newStream;
}
public override object GetInitializer(Type WebServiceType)
{
// filename = "C:\\temp\\soap_" + WebServiceType.FullName + ".txt";
//return filename;
return null;
}
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{
//return filename;
return null;
}
public override void Initialize(object initializer)
{
// filename = (string)initializer;
}
public override void ProcessMessage(SoapMessage message)
{
//int i = 0;
//int j = 1 / i; // DEBUG: Stop here
switch (message.Stage)
{
case SoapMessageStage.BeforeSerialize:
break;
case SoapMessageStage.AfterSerialize:
WriteOutput(message);
break;
case SoapMessageStage.BeforeDeserialize:
WriteInput(message);
break;
case SoapMessageStage.AfterDeserialize:
break;
}
}
...
app.config => app.config =>
<?xml version="1.0"?>
<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add
type="GITSearchClient.ClientTraceExtension, GITSearchClient"
priority="1"
group="0"/>
</soapExtensionTypes>
</webServices>
</system.web>
<startup>
<supportedRuntime version="v2.0.50727" sku="Client"/>
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
...
Form1.cs => Form1.cs =>
try
{
GitSearchServiceSoapClient webService = new GitSearchServiceSoapClient();
RequestOptions requestOptions = new RequestOptions();
resp = webService.GetOosData(requestOptions, edtGroupId2.Text, "2012");
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.