簡體   English   中英

如何在類庫項目中通過服務引用獲取XML格式的wcf響應

[英]How to get wcf response in XML format which is referenced through service reference in class library project

// Created obj for wcf service
ServiceSummary.ImageService.ManagerServiceClient obj1 = new ServiceSummary.ImageService.ManagerServiceClient(); 

// Forming a request body
var request = new ImageService.GetImageRequest
                {
                    UserContextData = new ImageService.UserContextData
                    {
                        Country = Country.ToUpper(),
                        Region = Region.ToUpper()
                    },
                };

// Invoking GetImageResponse and storing result in response variable
var response = obj1.GetImageResponse(request);

響應返回的類型為 class - 如何以 XML 格式獲取響應?

我有點困惑為什么我們需要原始 XML 數據。 但是我們可以通過使用IClientMessageInspector完全獲取源消息,SOAP消息包絡。
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.iclientmessageinspector?redirectedfrom=MSDN&view=netframework-4.8
下面是一個示例,假設您使用客戶端代理調用服務。

public class ClientMessageLogger : IClientMessageInspector
    {
        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            Console.WriteLine(reply);
        }

        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            return null;
        }
    }
    public class CustContractBehaviorAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
    {
        public Type TargetContract => typeof(IService);

        public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
            return;
        }

        public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            clientRuntime.ClientMessageInspectors.Add(new ClientMessageLogger());
        }

        public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
        {
            return;
        }

        public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
        {
            return;
        }
}

然后將契約行為應用到自動生成的服務契約上。

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServiceReference1.IService")]
    [CustContractBehavior]
public interface IService {

結果。
在此處輸入圖片說明
如果有什么我可以幫忙的,請隨時告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM