Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用VBA使用WCF web服务,如何更改绑定?_Ms Access_Wcf_Soap_Vba - Fatal编程技术网

Ms access 使用VBA使用WCF web服务,如何更改绑定?

Ms access 使用VBA使用WCF web服务,如何更改绑定?,ms-access,wcf,soap,vba,Ms Access,Wcf,Soap,Vba,我正在开发一个Access 2010“工具”,希望它能让我将本地Access数据库与在线数据库同步(托管在一个我们无法控制或直接访问的服务器上)。我的背景不是VBA或VB.net,因此我对这门语言相当陌生,因此任何帮助或建议都将不胜感激。到目前为止,这是我编写的一个测试,用于验证连接能力,并更好地理解当我们得到有效响应时返回的内容 Public Sub SendXML() Dim myHTTP As MSXML2.ServerXMLHTTP60 Dim myDom As MSXM

我正在开发一个Access 2010“工具”,希望它能让我将本地Access数据库与在线数据库同步(托管在一个我们无法控制或直接访问的服务器上)。我的背景不是VBA或VB.net,因此我对这门语言相当陌生,因此任何帮助或建议都将不胜感激。到目前为止,这是我编写的一个测试,用于验证连接能力,并更好地理解当我们得到有效响应时返回的内容

Public Sub SendXML()
    Dim myHTTP As MSXML2.ServerXMLHTTP60
    Dim myDom As MSXML2.DOMDocument
    Dim myXML As String
    Set myHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set myDom = CreateObject("MSXML2.DOMDocument")
    myDom.async = False
    myXML = "<s:Envelope xmlns:a=" & Chr(34) & "http://www.w3.org/2005/08/addressing" & Chr(34) & "xmlns:s=" & Chr(34) & "http://www.w3.org/2003/05/soap-envelope" & Chr(34) & "><s:Header><a:Action s:mustUnderstand=" & Chr(34) & "1" & Chr(34) & ">http://tempuri.org/IWcfService/Get_InitiativeList_CSV</a:Action></s:Header><s:Body><Get_InitiativeList_CSV xmlns=" & Chr(34) & "http://tempuri.org/" & Chr(34) & "><userID>MYUSERID</userID></Get_InitiativeList_CSV></s:Body></s:Envelope>"
    myDom.LoadXML (myXML)
    myHTTP.Open "post", "https://server/WcfService/WcfService.svc", False
    myHTTP.setRequestHeader "Content-Type", "application/xml"   
    'myHTTP.send (myDom.XML)
    myHTTP.send (myXML)
    MsgBox myHTTP.responseText
End Sub
上面有几点需要注意。我尝试了两种不同的方法来创建XML字符串。一个是如上面所示创建它并将原始文本发送到服务器。如上图所示创建字符串,并使用
loadXML
创建字符串。我不知道为什么一个会比另一个好,但两个都返回相同的错误

现在,我已经尝试了SOA Cleaner Express,并且能够成功地连接到服务并获取数据。由于SOA Cleaner能够连接,我认为使用VBA中SOA发送的原始SOAP/XML字符串可能是一个很好的起点。我注意到,使用SOA cleaner时,它有一个WCF绑定作为
WsHttpBinding
,如果我将此绑定更改为
BasicHttpBinding
,我会得到一个与VBA中类似的错误消息,确切地说:

Content Type text/xml; charset=utf-8 was not supported by service 
我甚至不确定我的方向是否正确,但如果我正确,我如何在VBA中设置或更改“绑定”?这里还有别的事吗?我相信这很简单,但正如我所说,我没有VBA背景,WCF和SOAP对我来说也有些陌生


非常感谢您的帮助。

首先,来自客户端的绑定必须与服务匹配,因此如果服务仅支持
wsHttpBinding
,客户端也必须使用该绑定

为了增加从VBA调用WCF服务的灵活性,包括指定绑定的能力,您可能希望改用名字。下面是在VBA中构造和使用的服务monkier的示例:

Dim addr As String
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"","
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"","
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/"","
addr = addr + "binding=""NetTcpBinding_IService1"", bindingNamespace=""http://tempuri.org/"""

Dim service1 As Object
Set service1 = GetObject(addr)

MsgBox service1.GetData(12)
以下是一些包含更多信息的链接,包括此代码段的源代码:


这可能有些牵强,但考虑到第二个错误比第一个错误更具描述性,您是否尝试过指定字符集

myHTTP.setRequestHeader "Content-Type", "application/xml; charset=utf-8"

感谢您的回复和链接。我两个都去过,很快就迷路了。我需要更多的信息来开始。首先,从一个快速的谷歌,我不认为我试图消费的服务有一个“MexAddress”,也不知道或理解什么是MexAddress。我发布到服务的包是用SOAP格式化的(如果有帮助的话)。实际上,SOAP是WCF的默认协议。您能为服务获取一个WSDL来描述它吗?(在浏览器中的服务URL末尾添加“?WSDL”)。您如何知道服务上有哪些可用操作?是的,我可以通过浏览器获取WSDL。我还使用了SOA Cleaner Pro来加载WSDL并获得特定的操作。我还有一份技术文档,描述了操作(中的预期内容和返回的内容)。谢谢,但不幸的是,在同一错误消息中添加了
charset=utf-8 results
myHTTP.setRequestHeader "Content-Type", "application/xml; charset=utf-8"