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

时间:2014-06-20 14:44:34

标签: c# asp.net web-services fedex

我正在尝试在 asp.net 网站中集成 Fedex服务。我已经从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行):

  

无法生成临时类(result = 1)。   错误CS0029:无法隐式转换类型   'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType'到   'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType []'

2 个答案:

答案 0 :(得分:20)

这可能是WSDL.exe生成客户端代码的方式的问题。

您必须手动编辑Reference.cs文件,以便在[][]定义中将双括号[]替换为单EmailNotificationEventType

来自Microsoft

  

目前尚无法解决问题。但是,有三种解决方法可供使用:

     
      
  • 您可以使用WSDL.exe手动生成代理类,然后将数据类型不恰当地创建的代理类更改为二维数组(例如," CustomType [] []&# 34;)所以它是一个单维数组(例如," CustomType []")。
  •   
  • 您可以更改所需Web服务描述语言(WSDL)中的数据类型,以便在定义中包含第二个可选元素。您可以通过添加如下元素来完成此操作:   <xs:element minOccurs="0" name="dummyElement" nillable="true" type="xs:string"/>
  •   
  • 您可以在所需的WSDL中更改复杂类型,以便边界属性是复杂类型的一部分,而不是元素的一部分。 (也就是说,您可以将minOccurs和maxOccurs属性移动到复杂类型,然后将其从元素中删除。)
  •   

另请查看此link以获取进一步说明。

答案 1 :(得分:0)

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

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

Click to see the image