简体   繁体   English

为什么我的C#Soap Extension没有被调用?

[英]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");
        ...

I think you are mixing old and new here, ie ASMX web services with WCF, see this question for a similar issue. 我认为您在这里将新旧混在一起,即ASMX Web服务和WCF,请参见类似问题的问题。 Look at the answers by John. 看看约翰的答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM