いくつかの問題にぶつかりつつ、安心なwcfサービスからファイルのダウンロードを開始する必要があります。安らかなWCFコールからダウンロード可能なファイルを提供する
私は静かな呼び出しをGETとして設定します(GET呼び出しは、パラメータが削除され、名前が変更されたものと同じです)、ブラウザをポイントして、正しい応答を返します。私のブラウザは私にファイルのダウンロードを促しますが、ファイルが受信されるとそれは空で、ヘッダーのコンテンツ長は0になります。
私がPOSTとして設定し、それをJQueryを使ってajax呼び出しとして呼び出すと、これはサービスにデータを渡す必要があるため、最終結果です。必要に応じてデータポイントをURLとGETを使用してください)。
私の質問:私は私のコンテンツを引き起こすwebHttpBinding(以下コード)を超えるストリームを返すために何かが欠けて
アムは実際に返されないように?
jqueryで受け取ったajaxレスポンスを、ブラウザがダウンロード可能なコンテンツタイプを認識する方法でリダイレクトすることはできますか?これはGETを使用する必要がありますか?
サービスコード:
[WebInvoke(Method = "POST", UriTemplate = "UtilizationReport", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json)]
public Stream DownloadUtilizationReport(string startDate, string endDate)
{
DateTime start = DateTime.Parse(startDate);
DateTime end = DateTime.Parse(endDate);
.
.
.
Stream stream = reportGenerator.GenerateUtilizationReport(exams);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/csv";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Disposition", "attachment; filename=MediaImport_Utilization_" + startDate + "-" + endDate + ".csv");
return stream;
}
エンドポイントの設定:POSTから受信
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="reportDownload" transferMode="StreamedResponse" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp faultExceptionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Poiesis.MediaImport.ReportingService">
<endpoint address="rest" binding="webHttpBinding" bindingConfiguration="reportDownload" behaviorConfiguration="webHttpBehavior"
name="restEndpoint" contract="Poiesis.MediaImport.IReportingService" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
応答:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/csv
Server: Microsoft-IIS/7.5
Content-Disposition: attachment; filename=MediaImport_Performance2000-01-01-2012-01-01.csv
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 18 Oct 2011 15:32:47 GMT
Content-Length: 0
運がまだありませんか?私は同じことをやろうとしていますが、CreateStreamResponseではなくCreateTextResponseに変更しなければなりませんでした。 –
いいえ、私はそれがリダイレクトのためのASPページを投げてダウンロード用のファイルを提供してしまったので、私は私が望むよりも少し頑丈だが、それは問題を解決した。 – JMorgan