gpt4 book ai didi

c# - 接收 eBay SOAP 通知消息

转载 作者:行者123 更新时间:2023-12-03 04:24:07 27 4
gpt4 key购买 nike

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

The server encountered an error processing the request. The exception message is 'Unable to deserialize XML body with root name 'Envelope' and root namespace 'http://schemas.xmlsoap.org/soap/envelope/' (for operation 'GetOutBid' and contract ('IReceiver', 'urn:ebay:apis:eBLBaseComponents')) using XmlSerializer. Ensure that the type corresponding to the XML is added to the known types collection of the service.'

从我在网上看到的情况来看,这可能与如何设置数据契约有关 - 我是 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);
}
}

最佳答案

根据您的代码,我发现服务和客户端之间的协议(protocol)是 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 请求内容以供进一步讨论。

关于c# - 接收 eBay SOAP 通知消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com