Может быть что-то глупое и очевидное, но только началось со служб WCF и VBA и пытается учиться.
Итак, у меня есть очень простое приложение-служба WCF, у которого есть метод, который получает байтовый массив в качестве входных данных и возвращает bool. Массив байтов состоит из содержимого документа и генерируется в VBA. Я пытаюсь подключиться из VBA к WCFService, передать байтовый массив и получить результат обратно в проект vba. Проблема в том, что я не уверен, как это сделать.
Вот что я попробовал: Код VBA
Public Function GetServiceData() As XMLHTTP
Dim httpData As New XMLHTTP
Dim webServiceURL As String
webServiceURL = ipAddress & port & "/TestService.svc/AttachFile"
httpData.Open "POST", webServiceURL, False
httpData.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
httpData.send Example
Set GetServiceData = httpData
End Function
End FunctionPublic Function GetFileBytes(ByVal path As String) As Byte()
Dim lngFileNum As Long
Dim bytRtnVal() As Byte
lngFileNum = FreeFile
If LenB(Dir(path)) Then ''// Does file exist?
Open path For Binary Access Read As lngFileNum
ReDim bytRtnVal(LOF(lngFileNum) - 1&) As Byte
Get lngFileNum, , bytRtnVal
Close lngFileNum
Else
Err.Raise 53
End If
GetFileBytes = bytRtnVal
Erase bytRtnVal
End Function
Public Function Example() As Byte()
Dim byteFile() As Byte
byteFile = GetFileBytes("C:\Desktop\FilesForTesting\TestDocument13_2.docx")
Example = byteFile
End Function
Сервис Wcf: Интерфейс
[ServiceContract]
public interface IAttachItService
{
[OperationContract]
[WebInvoke]
(Method = "POST",
UriTemplate = "/AttachFile/{fileName}",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
string AttachFile(byte [] fileName);
}
Wcf service: Веб-конфигурация
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors >
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="REST">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="BestService.AttachItService" behaviorConfiguration="ServiceBehavior">
<endpoint binding="webHttpBinding" contract="BestService.IAttachItService" behaviorConfiguration="REST"/>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Когда я запускаю макрос vba, не могу найти методы обслуживания, поэтому я получаю ошибку 404 Не найдено.
Единственное, что работает, - это добавление параметра в конце URI, что не является решением, поскольку я получаю URI ошибки слишком долго.
Спасибо.