接收 eBay SOAP 通知消息

Posted

技术标签:

【中文标题】接收 eBay SOAP 通知消息【英文标题】:Receiving eBay SOAP notification messages 【发布时间】:2018-01-05 22:59:27 【问题描述】:

我正在尝试使用 ebay 及其 SDK 接收通知。我设法找到了一个使用 ASP.net Web 服务的工作示例。但是,我希望能够在 Azure 上托管它并将其移动到 WCF 似乎是一个合适的解决方案。我已经尝试过这样做,我得到的最接近的是得到一个xml serializer 错误,如下所示:

服务器在处理请求时遇到错误。异常消息是“无法使用 XmlSerializer 反序列化具有根名称“信封”和根命名空间“http://schemas.xmlsoap.org/soap/envelope/”的 XML 正文(用于操作“GetOutBid”和合同(“IReceiver”、“urn:ebay:apis:eBLBaseComponents”)) .确保将 XML 对应的类型添加到服务的已知类型集合中。'

从我在网上看到的情况来看,这可能与数据合同的设置方式有关 - 我是 WCF 新手,所以不确定!

以下是我尝试放入 WCF 的 Web 服务的工作原理:

[WebMethod()]
[System.Web.Services.Protocols.SoapHeaderAttribute("RequesterCredentials", Direction = System.Web.Services.Protocols.SoapHeaderDirection.In)]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(Action = "http://developer.ebay.com/notification/OutBid", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare)]
public void OutBid(GetItemResponseType GetItemResponse)

    if (CheckSignature(GetItemResponse.Timestamp))
    
        //Implement your own business logic here
    
    else
    
        //Implement your own business logic here
    
    LogRequest(Server.MapPath("files/OutBid_" + GetItemResponse.Item.ItemID + "_" + GetItemResponse.Item.SellingStatus.BidCount.ToString() + "_" + GetItemResponse.CorrelationID + ".xml"));

public class student  public int rollno  get; set;  
public class school  public student obj  get; set;  

class Program

    static void Main(string[] args)
    
        school obje = new school(); obje.obj.rollno = 2; Console.WriteLine(obje.obj.rollno);
    

【问题讨论】:

【参考方案1】:

根据您的代码,我发现服务和客户端之间的协议是 SOAP。为了支持 SOAP,我们需要在 WCF 中使用 basicHttpBinding。 web.config中的protocolMapping配置部分应该是这样的。

<protocolMapping>
  <add binding="basicHttpBinding" scheme="http"/>
</protocolMapping>    

之后,我们可以定义服务联系人和服务来处理请求。

服务联系人可以是这样的。

[ServiceContract]
public interface IService1

    [OperationContract(Action= "http://developer.ebay.com/notification/OutBid")]
    string OutBid(school value);

服务示例。

public class Service1 : IService1

    public string OutBid(school value)
    
        return string.Format("The rollno is 0", value.obj.rollno);
    

以下是我的测试结果。

样品请求。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://developer.ebay.com/notification/OutBid</Action>
  </s:Header>
  <s:Body>
    <OutBid xmlns="http://tempuri.org/">
      <value xmlns:d4p1="http://schemas.datacontract.org/2004/07/TestSOAP" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <d4p1:obj>
          <d4p1:rollno>2</d4p1:rollno>
        </d4p1:obj>
      </value>
    </OutBid>
  </s:Body>
</s:Envelope>

示例结果。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body>
    <OutBidResponse xmlns="http://tempuri.org/">
      <OutBidResult>The rollno is 2</OutBidResult>
    </OutBidResponse>
  </s:Body>
</s:Envelope>

如果您无法完成自己的工作,请发布您的示例 XML 请求内容以供进一步讨论。

【讨论】:

嗨,Amor,已经尝试了一段时间,但仍然遇到同样的错误。不完全理解为什么将学校作为参数类型,如果您不介意对此有所了解,那就太好了。非常感谢您的回复! WCF 将帮助您解析请求 XML 并为您从 XML 中反序列化对象。您能否提供您的请求 XML 的格式? 是的,这个链接有一个由 eBay 提供的 XML 示例:developer.ebay.com/Devzone/guides/ebayfeatures/Notifications/…

以上是关于接收 eBay SOAP 通知消息的主要内容,如果未能解决你的问题,请参考以下文章

使用命名空间的 SOAP 消息

谷歌云消息,接收消息,但不建立通知

我正在使用推送工具包并接收消息,但通知中心未显示该消息

无法在 ios 中接收来自 react-native-firebase 的通知消息

发送消息时如何接收通知

在 Whatsapp 或 Viber 上接收推送通知即时消息