我正在尝试使用ebay及其sdk接收通知。我已经设法找到一个使用asp.net Web服务的工作示例。但是我希望能够在Azure上托管这个并将其移动到WCF
似乎是一个合适的解决方案。我试过这样做,而我最接近的是得到xml serializer
错误,如下所示:
服务器在处理请求时遇到错误。异常消息是“无法使用根名称'Envelope'和根名称空间'http://schemas.xmlsoap.org/soap/envelope/'反序列化XML主体(对于操作'GetOutBid'和契约('IReceiver','urn:ebay:apis:eBLBaseComponents'))使用XmlSerializer。确保将与XML对应的类型添加到服务的已知类型集合中。'
从我在网上看到的,看起来可能与如何设置datacontract有关 - 我是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);
}
}
所以如果有人能指出我正确的方向,我会非常感激!!谢谢
答案 0 :(得分:0)
根据您的代码,我发现服务和客户端之间的协议是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请求内容以供进一步讨论。