簡體   English   中英

將文件發送到WCF時出錯:請求失敗,HTTP狀態為400:錯誤的請求

[英]Error while sending file to WCF: The request failed with HTTP status 400: Bad Request

我正在嘗試使用wcf服務上傳文件。 我正在獲取The request failed with HTTP status 400: Bad Request位於:

ds = WcfSpend.RegisterSupplier("blah", new SpendWcfRef.FileData 
{ 
    FileName = myFile.FileName.ToString(), 
    BufferData = file, 
    FilePosition = 1
});

WCF:

public DataSet RegisterSupplier(string SupplierId, FileData file)
{
    DataSet ds = new DataSet();
    return ds;
}

[ServiceContract]
public interface ISPEND
{

    [OperationContract]
    DataSet executeProcedure(string procedurename, string[] paramsName, string[] paramsValue, int num);

    [OperationContract]
    DataSet RegisterSupplier(string SupplierId, FileData file);

    //[OperationContract]
    //bool UploadFileData(FileData fileData);
}

[DataContract]
public class FileData
{
    [DataMember]
    public string FileName { get; set; }

    [DataMember]
    public byte[] BufferData { get; set; }

    [DataMember]
    public int FilePosition { get; set; }
}

應用:

ds = WcfSpend.RegisterSupplier("blah", new SpendWcfRef.FileData
{ 
    FileName = myFile.FileName.ToString(), 
    BufferData = file, FilePosition = 1
});

應用配置文件:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_ISPEND" 
                closeTimeout="00:01:00"     
                openTimeout="00:01:00" 
                receiveTimeout="00:10:00" 
                sendTimeout="00:01:00" 
                allowCookies="false" 
                bypassProxyOnLocal="false"
                hostNameComparisonMode="StrongWildcard"
                maxBufferSize="2147483647" 
                maxBufferPoolSize="2147483647" 
                maxReceivedMessageSize="2147483647" 
                messageEncoding="Text" 
                textEncoding="utf-8" 
                transferMode="Buffered" 
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647" 
                    maxNameTableCharCount="2147483647" />
                <security mode="None">
                    <transport clientCredentialType="None" 
                        proxyCredentialType="None" 
                        realm="" />
                    <message clientCredentialType="UserName" 
                        algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client/>
</system.serviceModel>

WCF WEB配置:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="myBindingForBigArrays"
                openTimeout="00:10:00" 
                closeTimeout="00:10:00" 
                receiveTimeout="00:10:00" 
                sendTimeout="00:10:00" 
                maxReceivedMessageSize="2147483647"
                maxBufferPoolSize="2147483647" 
                maxBufferSize="2147483647">
                <readerQuotas maxDepth="64"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="4096"
                    maxNameTableCharCount="16384"/>
            </binding>
        </basicHttpBinding>
    </bindings>
    <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>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel> 

可能有些情況導致了您所看到的錯誤。 我建議的第一件事是將創建的綁定配置分配給顯式定義的端點。 像這樣:

<!-- This goes in the <system.serviceModel> section -->
<services>
  <service name="MyService">
    <endpoint address="" 
              binding="wsHttpBinding"
              bindingConfiguration="myBindingForBigArrays"
              contract="<namespace>.ISpend" />
  </service>
</services>

以上是該服務的配置。 確保使用名稱空間完全限定合同名稱,並且服務名稱必須與.svc文件標記中的名稱相同。

您將為客戶端執行類似的操作,除了它是<client>標記而不是<service>

如果未指定在端點中使用的綁定配置,則WCF將為您選擇的綁定類型使用默認(較低)值。 另一種選擇是通過省略name屬性,使綁定配置成為該綁定的默認配置。

如果這不能解決問題,您還可以嘗試調整<system.web> <httpRuntime>元素的maxRequestLength值。 <system.web><configuration>的子代:

<system.web>
    <httpRuntime maxRequestLength="2147483647" />
</system.web>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM