我正在尝试在 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 []'
答案 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 [见下图]