2016-10-03 5 views
0

У меня проблема с использованием мыльного клиента в vb.net с сообществом Visual Studio 2015. Я хочу использовать для мыльной клиентской библиотеки, но я не могу ее найти.Visual Basic. Метод не может быть отражен

Итак, я нашел команду wsdl.exe в сообществе Visual Studio 2015. Я попробовал wsdl.exe. Он генерируется код в следующей ссылке:

https://github.com/yahoojp-marketing/sponsored-search-api-documents/blob/master/wsdl/LocationService.wsdl

C:\Program Files\Microsoft Visual Studio 14.0>wsdl /l:VB https://ss.yahooapis.jp/services/V6.0/LocationService?wsdl /out:C:\Users\user_name\Desktop\ 

Я добавил проект и успешно скомпилирован. Однако при создании объекта в этой строке возникает исключение.

Dim LocationServiceWsdl As New LocationService() 

Ниже приведено сообщение об ошибке.

Сообщение: LocationService.get не может быть отражено
InnnerException: произошла ошибка при отражении SoapHeader.
по адресу:
System.Web.Services.Protocols.SoapReflector.ReflectMethod (LogicalMethodInfo MethodInfo, Boolean клиент, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs)
System.Web.Services.Protocols.SoapClientType.GenerateXmlMappings (тип типа, ArrayList soapMethodList, String serviceNamespace, Boolean serviceDefaultIsEncoded, ArrayList отображения)
System.Web.Services.Protocols.SoapClientType..ctor (тип Type)
System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()

LocationSe rvice.vb

<System.Web.Services.Protocols.SoapHeaderAttribute("RequestHeader"), 
System.Web.Services.Protocols.SoapHeaderAttribute("ResponseHeader", Direction:=System.Web.Services.Protocols.SoapHeaderDirection.Out), 
System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace:="http://ss.yahooapis.jp/V6", ResponseNamespace:="http://ss.yahooapis.jp/V6", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> 
Public Function [get](ByVal accountId As Long, <System.Xml.Serialization.XmlElementAttribute("error")> ByRef [error]() As [Error]) As <System.Xml.Serialization.XmlElementAttribute("rval")> LocationReturnValue 
    Dim results() As Object = Me.Invoke("get", New Object() {accountId}) ' <- maybe error occurs here. 
    [error] = CType(results(1), [Error]()) 
    Return CType(results(0), LocationReturnValue) 
End Function 

Как я могу устранить эту ошибку?

ответ

1

Если вы проверите innerexception, вы увидите, что фактическая ошибка связана с классом SoapHeader, сгенерированным wsdl.exe.

Types 'System.Web.Services.Protocols.SoapHeader' and 'FullNamespaceToYourClass.SoapHeader' both use the XML type name, 'SoapHeader', from namespace 'http://ss.yahooapis.jp/V6'. Use XML attributes to specify a unique XML name and/or namespace for the type. 

Вы можете либо переименовать класс SoapHeader в файле LocationService.vb на что-то другое или попеременно добавлять полное пространство имен для вашего класса в XmlTypeAttribute:

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0"), 
System.SerializableAttribute(), 
System.Diagnostics.DebuggerStepThroughAttribute(), 
System.ComponentModel.DesignerCategoryAttribute("code"), 
    System.Xml.Serialization.XmlTypeAttribute(TypeName:="FullNamespaceToYourClass.SoapHeader", [Namespace]:="http://ss.yahooapis.jp/V6"), 
System.Xml.Serialization.XmlRootAttribute("RequestHeader", [Namespace]:="http://ss.yahooapis.jp/V6", IsNullable:=False)> 

Partial Public Class SoapHeader 
    Inherits System.Web.Services.Protocols.SoapHeader 
+0

Это работало !!! Большое спасибо! – aipa