Fedex 服务集成错误(无法生成临时类)

问题描述 投票:0回答:3

我正在尝试将 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[]'

c# asp.net web-services fedex
3个回答
26
投票

这可能是 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 属性移至复杂类型,然后从元素中删除它们。)

另请检查此链接以获取进一步说明。


2
投票

我尝试了第三个选项“您可以更改所需 WSDL 中的复杂类型,以便边界属性成为复杂类型的一部分,而不是元素的一部分。(也就是说,您可以将 minOccurs 和 maxOccurs 属性移动到复杂类型,然后从元素中删除它们。)”并且它起作用了。解决办法如下:

从 WSDL 中删除了 NotificationEventsAvailable 元素的 minOccurs 和 maxOccurs [参见下图]

Screenshot


0
投票

Fedex WSDL 有问题。解决这个问题最简单的方法就是更换

private NotificationEventType[][] recipientDetailsField;

private NotificationEventType[] recipientDetailsField;

在 FedexTrackingService 的 Reference.cs 中。您只需单击 TrackService() 即可访问该文件。然后搜索“[][]”。我相信应该是三个替换也许两个我不确定。只需将所有“[][]”替换为“[]”即可。

请记住,每当您在 Web 参考中更新 FedexTrackingService 时,您都需要再次执行此过程。

© www.soinside.com 2019 - 2024. All rights reserved.