Данные вложений, отправленные из Soap UI, не получены в службе WCF - PullRequest
0 голосов
/ 15 октября 2019

У меня есть служба wcf, которая ищет данные потока

[MessageContract]
public class NextService : INextService
{  
    [WebInvoke(Method = "POST", UriTemplate = "*")]
    public void Upload(Stream data)
    {
        try
        {
            _log.InfoFormat("-------------{0}------------------------------", data);



            var request = WebOperationContext.Current.IncomingRequest;
            WebHeaderCollection headers = request.Headers;
            _log.InfoFormat(request.Method + " ");// + request.UriTemplateMatch.RequestUri.AbsolutePath);
            foreach (string headerName in headers.AllKeys)
            {
                _log.InfoFormat(headerName + ": " + headers[headerName]);
            }

            if (File.Exists(@"c:\\test\\ViewDocumentOp.pdf"))
                File.Delete(@"c:\\test\\ViewDocumentOp.pdf");
            using (FileStream fs = new FileStream(@"c:\\test\\ViewDocumentOp.pdf", FileMode.CreateNew, FileAccess.Write))
            {
                CopyStream(data, fs);
            }

            StreamReader bodyReader = new StreamReader(data);
            string bodyString = bodyReader.ReadToEnd();
            int length = bodyString.Length;
            _log.InfoFormat("-------------------------------------------------------");

        }
        catch (Exception ex)
        {
            _log.ErrorFormat(" Error in UploadDoc {0} Message : {1}", ex.StackTrace, ex.Message);
        }
    }

Ниже приведен интерфейс

 [ServiceContract]
    public interface INextService
    {
        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
            void Upload(Stream data);
    }

Я добавил webconfig с деталями MTOM в привязке

       <basicHttpBinding>
                <binding name="Encode" messageEncoding="Mtom" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
                         transferMode="Streamed">
              </binding>                  
         </basicHttpBinding>
    <service behaviorConfiguration="NextServiceBehavior" name="SupportingDocsFacade.NextService">
            <endpoint address="/Upload" binding="basicHttpBinding" bindingConfiguration="Encode"
              name="Basic" contract="SupportingDocsFacade.INextGenService" />
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
          </service>

Я использую Soap UI, чтобы вызвать это. Также есть вложение. Необработанные данные, показанные в SoapUI, имеют граничные данные Soap XML data enter image description here Я включил MTOM в свойстве запроса согласно следующему SoapDoc Enable MTOM

Некоторые данные не доходят до веб-службы. Печать журнала в службе загрузки:

-------------System.ServiceModel.Dispatcher.StreamFormatter + MessageBodyStream ------------------------------ Data Error

1 Ответ

0 голосов
/ 16 октября 2019

Во-первых, мы не смогли напрямую отправить данные (позвонить в службу) на адрес службы, созданный Basichttpbinding. Это относится только к службе стиля отдыха WCF, созданной Webhttpbinding.
не может получить значения XML-запроса после публикации в wcf c #

http://xxxx:xx/service1.svc/upload

Если мы используем Basichttpbinding для создания службы, мы должны использовать базовый адрес для передачи потоковых данных, как указано в документе.
https://www.soapui.org/docs/soap-and-wsdl/attachments.html
мы используем для передачи встроенные файлыпараметр потока. см. скриншот ниже.
enter image description here
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...