Вызов службы WCF по VBScript - PullRequest
10 голосов
/ 03 июня 2009

Существует служба WCF с конфигурацией:

<services>
  <service name="MyService" behaviorConfiguration="MyServiceBehavior">
    <endpoint 
      binding="basicHttpBinding"  
      contract="IMyService" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8001/MyService" />
      </baseAddresses>
    </host>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehavior">
      <serviceMetadata httpGetEnabled="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Этот скрипт должен вызывать его:

Option Explicit

Dim soapClient
Dim serviceUri
Dim serviceName
Dim portName
Dim result

serviceUri = "http://localhost:8001/MyService"
serviceName = "MyService"
portName = "BasicHttpBinding_IMyService"

Set soapClient = CreateObject("MSSOAP.soapClient")
soapClient.ClientProperty("ServerHTTPRequest") = True
soapClient.mssoapinit serviceUri & "?WSDL", serviceName, portName

При запуске скрипта появляется эта ошибка:

Клиент: WSDLReader: анализ файла WSDL не выполнен HRESULT = 0x8 0004005 - WSDLReader: сбой инициализации службы HRESULT = 0x80004005 - Служба WSDL: сбой инициализации порта для службы MyService HRESULT = 0x80004005 - WSDLPort: анализ информации о привязке для порта BasicHttpBinding_IMyService завершился ошибкой HRESULT = 0x80004005 - WSDLPort: не удалось инициализировать операцию для порта BasicHttpBinding_IMyService HRESULT = 0x8000 4005 - WSDLOperation: операция // def: portType [@ name = "IMyService"] / def: операция [@ name = "MyMethod"] не найдена в разделе типа порта HRESULT = 0x80004005

Что не так? Пожалуйста, помогите.

Edit:

Спасибо, Чизо, за ответ. Проблема с MSSOAP заключается в том, что для этого требуется, чтобы все схемы xsd были включены в сгенерированный файл WSDL. WCF не делает этого по умолчанию.

1 Ответ

15 голосов
/ 03 июня 2009

Не используйте MSSOAP. Я думаю, что сейчас нет поддержки, последние 3 или 4 года. Рассмотрите возможность использования XmlHttp, который является частью MSXML, и поддерживается и продолжает поддерживаться. Вам нужно будет создать конверт SOAP вручную. Но так надежнее.

пример кода

' URL to the WCF service'
url= "http://server:port/Wcf.Service.Address"

Dim requestDoc
Set requestDoc = WScript.CreateObject("MSXML2.DOMDocument.6.0")

Dim root
Set root = requestDoc.createNode(1, "Envelope", "http://schemas.xmlsoap.org/soap/envelope/")
requestDoc.appendChild root

Dim nodeBody
Set nodeBody = requestDoc.createNode(1, "Body", "http://schemas.xmlsoap.org/soap/envelope/")
root.appendChild nodeBody

Dim nodeOp
Set nodeOp = requestDoc.createNode(1, "Register", "urn:Your.Namespace.Here")
nodeBody.appendChild nodeOp

Dim nodeRequest
Set nodeRequest = requestDoc.createNode(1, "request", "urn:Your.Namespace.Here")
'content of the request will vary depending on the WCF Service.'
' This one takes just a plain string. '
nodeRequest.text = "Hello from a VBScript client."

nodeOp.appendChild nodeRequest

Set nodeRequest = Nothing
Set nodeOp = Nothing
Set nodeBody = Nothing
Set root = Nothing


'the request will look like this:'
'       <s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> '
'         <s:Body> '
'           <Register xmlns='urn:Your.Namespace.Here'> '
'               <request>hello from a VBScript client.</request> '
'           </Register> '
'         </s:Body> '
'       </s:Envelope>'


WSCript.Echo  "sending request " & vbcrlf & requestDoc.xml


dim xmlhttp

set xmlhttp = WScript.CreateObject("MSXML2.ServerXMLHTTP.6.0")
' set the proxy as necessary and desired '
xmlhttp.setProxy 2, "http://localhost:8888"
xmlhttp.Open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "text/xml"
' set SOAPAction as appropriate for the operation '
xmlhttp.setRequestHeader "SOAPAction", "urn:Set.As.Appropriate"
xmlhttp.send requestDoc.xml

WScript.Echo vbcrlf & "Raw XML response:" & vbcrlf 
WSCript.Echo  xmlhttp.responseXML.xml

dim response
set response= xmlhttp.responseXML
'the response is an MSXML2.DOMDocument.6.0' 
'party on the response here - XPath, walk the DOM, etc. '

К вашему сведению: См. , какую версию msxml-должен-я-использовать , чтобы узнать, как выбрать версию MSXML.

...