1

大きな画像をアップロードするために使用したいwcfサービスがあります。ストリーミングが有効になっている基本的なhttpエンドポイントがあります。

現在、Windowsアプリケーションからこのサービスを呼び出すと、http 400が表示されます。不思議なことに、400エラー(ブレークポイントに到達)後もメソッドに入りますが、渡したストリームを読み取ることができません(uploadStream.ReadByte() -1を返します)

また、文字列を受け取り、テストのためだけに文字列を返すメソッドを作成しました。これは100%機能します。

私は多くの解決策の記事を読みましたが、nonは私の問題を解決しているようです。

Web.config

  <system.web>
        <httpRuntime
        maxRequestLength="65536"
        />
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="FileUploadServiceBinding" closeTimeout="04:01:00"
                         openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" 
                         allowCookies="false" bypassProxyOnLocal="false"
                         hostNameComparisonMode="StrongWildcard"
                         maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
                         maxReceivedMessageSize="2147483647"
                         messageEncoding="Mtom" textEncoding="utf-8"
                         transferMode="Streamed"
                         useDefaultWebProxy="true">
                    <security mode="None">
                        <transport clientCredentialType="None" />
                    </security>
                    <readerQuotas maxDepth="128"
                        maxStringContentLength="2147483647" maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <services>
            <service name="Smd.ThreeSixtyDataTransfer.ThreeSixtyDataTransferService">
                <endpoint address="" binding="basicHttpBinding" bindingConfiguration="FileUploadServiceBinding"
                 contract="Smd.ThreeSixtyDataTransfer.IThreeSixtyDataTransferService">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8732/ThreeSixtyDataTransferService/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior>
                    <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="True"/>
                    <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
                    <serviceDebug includeExceptionDetailInFaults="False" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

サービス

public class ThreeSixtyDataTransferService : IThreeSixtyDataTransferService
{

    public RequestResponse AttachPhotoToDataItem(UploadMessage photo)
    {

        ...

        return new RequestResponse() { UploadSucceeded = true };
    }

    public string Test(string test)
    {
            return test;
    }
}
[ServiceContract]
public interface IThreeSixtyDataTransferService
{

    [OperationContract]
    RequestResponse AttachPhotoToDataItem(UploadMessage photo);

    [OperationContract]
    string Test(string test);


}


[MessageContract]
public class UploadMessage
{
    [MessageHeader(MustUnderstand = true)]
    public Guid DataId { get; set; }

    [MessageBodyMember(Order = 1)]
    public Stream Stream { get; set; }
}


[MessageContract]
public class RequestResponse
{
    [MessageBodyMember(Order = 1)]
    public bool UploadSucceeded { get; set; }
}

クライアント

 using (Stream uploadStream =new FileStream("D:\\Folder\\somefoto.jpg", FileMode.Open))
 {

            using (ThreeSixtyDataTransferService.ThreeSixtyDataTransferServiceClient threeSixtyDataTransferService = new ThreeSixtyDataTransferService.ThreeSixtyDataTransferServiceClient())
            {
                        var test =threeSixtyDataTransferService.Test("Test");//works    
                        threeSixtyDataTransferService.AttachPhotoToDataItem(Guid.NewGuid(), uploadStream);//400
            }
 }

私はどんな援助にも素晴らしいです

4

0 に答える 0