Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式从客户端捕获第三方web服务xml_C#_Xml_Web Services_Wcf - Fatal编程技术网

C# 如何以编程方式从客户端捕获第三方web服务xml

C# 如何以编程方式从客户端捕获第三方web服务xml,c#,xml,web-services,wcf,C#,Xml,Web Services,Wcf,我经常调用第三方web服务,它可能由经典web服务(ASMX)或WCF开发。我只是从VSIDE添加他们的web服务引用,当我们从我的终端调用该web服务时,会生成一个xml并发布到web服务url。当我需要捕获web服务发布到web服务url的xml时,我需要使用fiddler,但我需要以编程方式捕获即将发布的xml 我不知道如何从客户端以编程方式捕获它。我需要一个简单的解决方案来捕获用于开发web服务的任何技术。我想从外面挂接,这样当调用web服务时会触发一个事件,并且从该事件中我应该能够获得

我经常调用第三方web服务,它可能由经典web服务
(ASMX)或WCF
开发。我只是从VSIDE添加他们的web服务引用,当我们从我的终端调用该web服务时,会生成一个xml并发布到web服务url。当我需要捕获web服务发布到web服务url的xml时,我需要使用fiddler,但我需要以编程方式捕获即将发布的xml


我不知道如何从客户端以编程方式捕获它。我需要一个简单的解决方案来捕获用于开发web服务的任何技术。我想从外面挂接,这样当调用web服务时会触发一个事件,并且从该事件中我应该能够获得整个xml。正在寻找详细帮助。谢谢

无论第三方服务是旧的asmx web服务还是WCF服务,您都可以使用WCF客户端使用它们。也就是说,如果您使用WCF,那么很容易捕获传出和传入的消息

您需要的是一个称为消息检查器的WCF扩展点。检查此链接:


它将允许您将行为附加到WCF端点,从而允许您访问WCF客户端的传出和传入消息。由于它将是您的消息检查器,因此您可以对消息执行任何您想要的操作—记录消息、以任何您想要的方式更改消息等等。

没有单一的扩展点来获取任何传出SOAP。您可以构建自己的代理并强制所有消息通过它,但这会影响性能和一般开销。但是,每个框架都有自己的扩展点。您可以实现每一个接口,然后调用处理这两个接口的单个接口。例如,在WCF中,您可以实现跟踪侦听器来接收有关传出SOAP的消息。看见使日志如下所示:

<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
                 <add name="messages"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
    </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging 
         logEntireMessage="true" 
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>


并将您自己的类而不是System.Diagnostics.XmlWriterTraceListener。

如果Fiddler满足您的需要,您实际上可以将Fiddler的核心引擎集成到您的代码中,并以这种方式捕获内容。此库可在

上找到。请查看。也许您可以尝试以编程方式使用该命令?AFAIK Visual Studio使用disco工具从GUI(VS解决方案)中创建Web服务引用。可能Web服务可以使用wcf开发,那么如何以编程方式捕获?我是否应该在客户端添加您在此处提供的全部xml。它也适用于asmx吗?是的,添加了所有内容。这对asmx不起作用。我认为您需要使用SoapExtensionAnks进行回复。如果我添加上述xml,则会出现任何性能问题?是的,记录完整消息会降低性能,尤其是在您有许多呼叫的情况下。您需要进行测试,看看这是否有意义。在现实生活中,人们是如何记录传入和传出的xml的?是否有类似于如何在我的项目中集成fiddler core的示例代码。这取决于。你的服务有多少流量?这些信息有多大?当然,这不会提高您的服务性能,但如果使用适当的工具正确地执行,其影响可以忽略不计。