我正在尝试将 Fedex Service 集成到我的 asp.net 网站中。我已经从 Fedex 网站下载了代码,但是当我运行这个简单的程序时,出现错误, 检查以下代码:
static void Main(string[] args)
{
TrackRequest request = CreateTrackRequest();
TrackService service = new TrackService();//I get Error Here
if (usePropertyFile())
{
service.Url = getProperty("endpoint");
}
try
{
// Call the Track web service passing in a TrackRequest and returning a TrackReply
TrackReply reply = service.track(request);
if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING)
{
ShowTrackReply(reply);
}
ShowNotifications(reply);
}
catch (SoapException e)
{
Console.WriteLine(e.Detail.InnerText);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("Press any key to quit!");
Console.ReadKey();
}
调试时出现以下错误
TrackService service = new TrackService();
(第 5 行):
无法生成临时类(结果=1)。 错误CS0029:无法隐式转换类型 'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType' 至 'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType[]'
这可能是 WSDL.exe 生成客户端代码的方式存在问题。
您必须手动编辑 Reference.cs 文件,以将
[][]
定义中的双括号 []
替换为单 EmailNotificationEventType
。
来自 微软:
目前没有可用的解决方案。但是,可以使用三种解决方法:
- 您可以使用 WSDL.exe 手动生成代理类,然后将数据类型不恰当地创建为二维数组(例如“CustomType[][]”)的代理类更改为一维数组(例如“CustomType[]”)。
- 您可以更改所需 Web 服务描述语言 (WSDL) 中的数据类型,以便在定义中包含第二个可选元素。您可以通过添加如下元素来完成此操作:
<xs:element minOccurs="0" name="dummyElement" nillable="true" type="xs:string"/>
- 您可以更改所需 WSDL 中的复杂类型,以便边界属性成为复杂类型的一部分,而不是元素的一部分。 (也就是说,您可以将 minOccurs 和 maxOccurs 属性移至复杂类型,然后从元素中删除它们。)
另请检查此链接以获取进一步说明。
我尝试了第三个选项“您可以更改所需 WSDL 中的复杂类型,以便边界属性成为复杂类型的一部分,而不是元素的一部分。(也就是说,您可以将 minOccurs 和 maxOccurs 属性移动到复杂类型,然后从元素中删除它们。)”并且它起作用了。解决办法如下:
从 WSDL 中删除了 NotificationEventsAvailable 元素的 minOccurs 和 maxOccurs [参见下图]
Fedex WSDL 有问题。解决这个问题最简单的方法就是更换
private NotificationEventType[][] recipientDetailsField;
与
private NotificationEventType[] recipientDetailsField;
在 FedexTrackingService 的 Reference.cs 中。您只需单击 TrackService() 即可访问该文件。然后搜索“[][]”。我相信应该是三个替换也许两个我不确定。只需将所有“[][]”替换为“[]”即可。
请记住,每当您在 Web 参考中更新 FedexTrackingService 时,您都需要再次执行此过程。