C# 联邦快递服务集成错误(无法生成临时类)

C# 联邦快递服务集成错误(无法生成临时类),c#,asp.net,web-services,fedex,C#,Asp.net,Web Services,Fedex,我正在尝试将联邦快递服务集成到我的asp.net网站中。我已经从联邦快递网站下载了代码,但是当我运行这个简单的程序时,我得到了一个错误, 检查以下代码: static void Main(string[] args) { TrackRequest request = CreateTrackRequest(); TrackService service = new TrackService();//I get Error Here if (usePropertyFile(

我正在尝试将联邦快递服务集成到我的asp.net网站中。我已经从联邦快递网站下载了代码,但是当我运行这个简单的程序时,我得到了一个错误, 检查以下代码:

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)中的数据类型,以便在定义中包含第二个可选元素。可以通过添加以下元素来完成此操作:
  • 您可以更改所需WSDL中的复杂类型,以便边界属性是复杂类型的一部分,而不是元素的一部分。(也就是说,可以将minOccurs和maxOccurs属性移动到复杂类型,然后将它们从元素中删除。)
请检查此项以获得进一步解释。

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

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


TrackService只是一个可以实例化的“POCO”吗?如果这是一个web服务,我想联邦快递会提供一个WSDL,您可以将其作为web引用添加到您的项目中,然后使用生成的存根调用“track”方法。您必须手动编辑reference.cs文件,以将EmailNotificationEventType定义中的双括号[]替换为单括号[]……它正在工作。。谢谢,这纠正了我的问题,但是,我现在无法从联邦快递获得电子邮件通知,联邦快递无法找出原因,因为请求是正确的。还有其他人有这个问题吗?(仅供参考:消息团队已确认trackingupdates(at)fedex.com电子邮件地址已列入白名单)首先,我尝试了第三个选项,将minOccurs/maxOccurs移动到comlex类型,并将其从元素中删除,当它在本地工作时,我们的Jenkins构建失败,出现了原始错误消息。然后我尝试了第1个选项,使用WSDL.exe生成类,从生成的类中删除双括号,并将生成的.cs文件添加到项目中,这很有效。请将代码作为代码而不是图像包含。这让其他人更容易搜索和阅读你的答案。哇,谢谢,我收到了与OP相同的信息,这对我来说很有用。恐怕我不认为你的描述很清楚,我也不确定它是否有效,但确实有效。我刚刚从“TrackNotificationRecipientDetail”复杂类型下的“NotificationEventsAvailable”元素中删除了“minOccurs”和“maxOccurs”属性(因此.wsdl文件中的第1533行),这些属性也不确定。你提到“移动最小值/最大值发生”,但它只是简单地删除它们;我编辑了.wsdl文件并重新添加了Web引用,它似乎起了作用,直到我的同事通知我我们的Jenkins构建失败(一个自动构建推送服务)。我不知道到底发生了什么,但它抛出了OP中的原始错误。我最终使用WSDL.exe工具手动生成代理类,编辑它以删除双括号[],然后将该.cs类添加到项目中,使其与我在Web引用之前使用的名称空间相同。必须更新一些对象名称,但当时效果很好。