Отправить байтовый массив из VBA в WCFService - PullRequest
0 голосов
/ 24 августа 2018

Может быть что-то глупое и очевидное, но только началось со служб 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 ошибки слишком долго.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...