問題タブ [wcf-streaming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - WCF IIS 7 ホステッド サービスへのアップロード ストリーミングが機能しない
IIS 7 で実行するように設定している wcf サービスがあります。サービスを転送モードのストリーミングに設定しています。コンソール アプリケーションでサービスを自己ホストすると、すべてが正常に機能するように見えます。しかし、クライアントが iis ホステッド サービスに接続すると、バッファリングしているように見え、クライアントは最終的にタイムアウトします。フィドラーを使用して、http 要求が行われる前にこのクライアントのタイムアウトが発生することを確認しました。
これがサーバーバインディングです。
そしてクライアントバインディング:
余談ですが、ストリームは無限であり、サーバーは最初の数バイトを読み取ってからストリームを閉じる必要があるため、接続がタイムアウトします。
wcf - クレデンシャルを識別するとともにWCFにファイルをアップロードするにはどうすればよいですか?
WCF、ストリーミング、セキュリティに最大の問題ではない問題がありますが、それを回避する方法について人々の考えを聞きたかったのです。
クライアントがサーバーにファイルをアップロードできるようにする必要があります。これは、BasicHttpBindingのtransferMode="StreamedRequest"機能を使用して許可しています。彼らがファイルをアップロードするとき、私はこのファイルをファイルシステムにトランザクション的に配置し、ファイルのメタデータでデータベースを更新したいと思います(私は実際にこれをネイティブにサポートするSql Server 2008のFILESTREAMデータ型を使用しています)。WCF Windows認証を使用しており、すべてのデータベース認証のためにKerberosクレデンシャルをSQLServerに委任しています。
問題は、私が参考になる例外として、「HTTPリクエストストリーミングをHTTP認証と組み合わせて使用することはできない」ということです。そのため、アップロードファイルサービスの場合、メッセージ呼び出しと一緒にWindows認証トークンを渡すことができません。SQL Serverログインを使用していなくても、Windowsのクレデンシャルで呼び出し元のクライアントを特定することさえできませんでした。
アップロードメソッドをセキュリティで保護せずに、ファイルを一時ストアにダンプしてロケーターGUIDを返すようにすることで、これを一時的に回避しました。次に、クライアントは安全な非ストリーミングサービスに2回目の呼び出しを行い、GUIDを渡します。GUIDは、Windows認証を使用して一時ストアからデータベースにファイルをアップロードします。
明らかに、これは理想的ではありません。パフォーマンスの観点から、私はディスクへの追加の読み取り/書き込みを行っています。スケーラビリティの観点から、(原則として、ロードバランサーを使用して)後続の2つの呼び出しで同じサーバーにアクセスするという保証はありません。つまり、一時ファイルストアは共有の場所にある必要があり、スケーラブルな設計ではありません。 。
誰かがこの状況に対処するためのより良い方法を考えることができますか?私が言ったように、それは最大の取引ではありません。なぜなら、a)私は実際にこれをあまりスケールアウトする必要がなく、ユーザーがあまり多くない、そしてb)これらのアップロード/ダウンロードが頻繁に呼び出されるようではないからです。しかし、それでも、ここで明らかな解決策が欠けているかどうかを知りたいです。
ありがとう、ダニエル
c# - WCF Stream.Readは、クライアントで常に0を返します
私はこれがうまくいかない理由を理解するために私の一日のほとんどを費やしました。オブジェクトをクライアントにストリーミングするWCFサービスがあります。次に、クライアントはファイルをディスクに書き込むことになっています。しかし、呼び出すstream.Read(buffer, 0, bufferLength)
と常に0が返されます。コードは次のとおりです。
サービス構成ファイル:
クライアント:
クライアントapp.config:
(簡潔にするために一部のコードを切り取った)
WCFストリーミングサービスの作成で見つけたものをすべて読みましたが、私のコードはそれらのコードと何ら変わりはありません。ストリーミングをバッファリングに置き換えて、オブジェクトをそのようにうまく送信することはできますが、ストリーミングしようとすると、クライアントは常にストリームを「空」と見なします。が作成されますtestFile.exe
が、サイズは0KBです。
私は何が欠けていますか?
Hrm
を更新
します。デバッグできません。デバッグしようとすると、WCFテストクライアントがストリームをサポートしていないことがわかります。しかし、whileループを配置せず、fs.Write(...)が1つしかない場合、ストリームが閉じると8KBが書き込まれるため、ストリーム内で何かが発生していることはわかっています。だから何かが伝わってきています。
私はあなたの投稿を見て、次のように追加しました。
私のIStreamServiceに。そしてdownloadStreamFile()
今、オブジェクトを返しFileDownloadMessage
ます。
しかし、クライアントのサービス参照を更新した後、オブジェクトdownloadStreamFile()
を返すと考えています。
それはまた、私が作成しなかったクラスを作成し、それがどこから来ているのかわかりません。TestApp.StreamServiceRef.MemoryStream
downloadStreamFileRequest()
c# - ストリーミングwcfの終了後にファイルを削除する方法
このコードプロジェクトの記事で説明されているように、netTcpBinding とストリーミングを使用して、あるサーバーから別のサーバーにファイルを送信します。wcf でストリームを送信する場合は、ストリームを作成してメッセージ コントラクトとして返す必要があることを理解しています。ファイル送信?ファイルの送信保証が完了したら、受信箱から送信箱にファイルを移動したい
c# - WCFによるストリーミング転送の制限
次のMSDNのガイドによると、ストリーム転送を使用する操作では、入力/出力パラメーターを1つだけ持つことができます。
リンク: http: //msdn.microsoft.com/en-us/library/ms731913.aspx(「ストリーミング転送の制限」の見出しを参照)
クライアント/コンシューマーがファイルをアップロードできるようにするWCFサービスにストリーミング転送を使用しています。アップロード自体は正常に機能しますが、Streamオブジェクトとともにさらに2つの入力パラメーター「stringfilename」と「intuserid」を渡す方法が必要です。
どうすればこれを行うことができますか?
c# - MessageContract を使用すると、起動時に WCF サービスがクラッシュする
この質問で起こっていることと同様に、MessageContract を WCF サービスに追加しようとしています: WCF: メッセージ コントラクトでのストリーミングの使用
ここに私が得る例外があります: System.ServiceModel.Channels.Message 型のパラメーターまたは戻り値の型、または MessageContractAttribute と異なる型の他のパラメーターを持つ型があるため、操作 'UploadFile' をロードできませんでした。System.ServiceModel.Channels.Message または MessageContractAttribute を持つ型を使用する場合、メソッドは他の型のパラメーターを使用してはなりません。
ここに私の契約があります:
app.config で使用しているバインド構成は次のとおりです。
現在、これは私が使用しているバインディングのタイプと関係があるのではないかと考えていますが、完全にはわかりません.
c# - 構成をコードに移動した後、WCF ストリーミング応答がバッファリングされる
streamedResponseサービスでnet.tcpバインディングを使用するクライアントサーバーアプリがあり、すべてのWCF構成がapp.configで定義されており、すべて問題なく正常に動作します。クライアントアプリから構成を削除してコードで定義する必要がありましたが、何もありませんサーバー上で変更されましたが、クライアントはこのトランジションでストリーミングではなくバッファリングされた応答を取得しているようです。クライアントコードでサービスを構築する方法は次のとおりです。
asp.net - WCFサービスエラー:例外の詳細:System.Net.WebException:リモートサーバーがエラーを返しました:(400)不正な要求
http経由でファイルをアップロードするWebサービスを作成しましたが、最初の試行では失敗します。
Webサービスは、ローカルコンピューターのIIS 7で、ASP.NET4統合アプリプールの下で実行されています。これが私のWebサービスのweb.configです。
これはクライアントのweb.configファイルです。
これが私が受け取るエラーです。
リモートサーバーがエラーを返しました:(400)不正な要求。
説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。
例外の詳細:System.Net.WebException:リモートサーバーがエラーを返しました:(400)不正な要求。
ソースエラー:
120行目:
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] 121行目:
FileUploadWcfServiceClient.TransferService.UploadFileResponse FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(FileUploadWcfServiceClient.TransferService.RemoteFileInfo request){122行目:returnbase.Channel .UploadFile(request); 123行目:} 124行目:ソースファイル:C:\ Apps \ FileUploadWcfService \ FileUploadWcfServiceClient \ Service References \ TransferService \ Reference.cs行:122
スタックトレース:
[WebException:リモートサーバーがエラーを返しました:(400)不正な要求。] System.Net.HttpWebRequest.GetResponse()+6111059
System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout)+48[ProtocolException:リモートサーバーが予期しない応答を返しました:(400)不正な要求。]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg、IMessage retMsg)+9456095
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke( MessageData&msgData、Int32 type)+345
FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(RemoteFileInfo request)+0
FileUploadWcfServiceClient.TransferService.TransferServiceClient.FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(RemoteFileInfo request)in C:\ Apps \ FileUploadWcf \ TransferService \ Reference.cs:122
FileUploadWcfServiceClient.Default.Button1_Click(Object sender、EventArgs e)in C:\ Apps \ FileUploadWcfService \ FileUploadWcfServiceClient \ Default.aspx.cs:85 System.Web.UI.WebControls.Button.OnClick(EventArgs e)+118System.Web
。 UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl 、String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)+5563バージョン情報:Microsoft .NET Frameworkバージョン:4.0.30319; ASP.NETバージョン:4.0.30319.225
アップロードしようとしているファイルは217KBなので、ここではファイルサイズは問題ではないと思います。
エラーの原因は何だと思いますか?
c# - .NET4でのWCFストリーミングファイル転送
WCFストリーミングファイル転送の良い例が必要です。
いくつか見つけて試しましたが、投稿が古く、.net4とIIS7で問題が発生しているため、いくつかの問題があります。
その上で最新の良い例を教えてください。
wcf - WCF が HTTP 認証を使用した HTTP 経由のリクエスト ストリーミングをサポートしていない理由は何ですか?
WCF は、HTTP 認証を使用した HTTP 経由の要求ストリーミング (別名、大きなデータのストリーミング アップロード) をサポートしていません。私の最初の推測では、認証ハンドシェイクが原因で、ストリーミング リクエストがサーバーに 2 回送信されたことが原因でした。しかし、それはバッファリングモードでの大規模なリクエストにも当てはまるため、意味がありません。
カスタム ASP.NET http ハンドラーで、HTTP 認証を使用して要求ストリーミングを簡単に実装できます。クライアントを制御できる場合は、明示的な HTTP HEAD を実行してサーバーに対して事前認証を行い、永続的な接続を再利用して HTTP POST で実際のストリーミング要求を行うことにより、「複数の要求の問題」を回避することもできます。
それで、WCFがこれをサポートしていない理由を誰でも考えることができますか? (それをする時間がないことを除いて)
ありがとう