問題タブ [windsor-facilities]
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 - Castle Windsor Wcf Facility : エンドポイント名の問題
私のアプリケーションは、WSDL ファイルがある WebService を使用しようとしています。そこで、SvcUtil.exe を使用してインターフェイスを生成しました。私は以下のように私のクラスでそれを使用しています:
「IExportService」を次のように注入しています。
私の問題は、インスタンスが注入されるクラス コンストラクター ("Usage") のプロパティ名 ("exportServiceProxyClient") と同じ app.config でエンドポイント名を使用することを余儀なくされていることです。私はそれが良い考えだとは思いません。これを行わないと、例外が発生します。
この問題を回避する方法がわかりません。Windsor がエンドポイント名を、それが注入されるクラスのコンストラクターの変数名と同じにする必要があるのはなぜですか。
誰でも助けることができますか?
castle-windsor - Castle Windsor: WCF クライアントとローカル コンポーネントの混合
[ServiceContract] 属性でマークされた (ウィンザー城の意味での) サービスがあります。それらの一部は WCF でホストされ、その他はローカルで実行されます。
インストーラーを可能な限り一般的なものにしたいと考えています。私が探しているロジックは次のとおりです。
- アプリケーションの bin ディレクトリでサービスを探します。
- 実装が見つかったものはすべて、ローカルで使用します (これはデコレータでも機能する必要があります)。
- 見つからないものはすべて、WCF 経由で呼び出されるものと想定します。
サービスは Web アプリケーションでホストされ、Application_Start メソッドはすべてをセットアップし、WCF を介してサービスをホストします。この Web アプリケーションでは、WCF を介した他のサービスへのアクセスも、追加のロジックなしで機能します。
ただし、ASP.NET MVC アプリケーションも持っていますが、WCF 経由でサービスを呼び出すことができません。私はいつも次のようなエラーメッセージが表示されます:
タイプ IMyService は抽象型です。そのため、サービス IMyService の実装としてインスタンス化することはできません。
そして、インターセプターを登録すると、
これは DynamicProxy2 エラーです: インターセプターは、ターゲットのないメソッド 'MyDataContract FooMethod(System.String)' に対して '続行' を試みました。ターゲットなしでメソッドを呼び出す場合、「続行」する実装はなく、実装を模倣するのはインターセプターの責任です (戻り値の設定、引数の出力など)。
これが私の最新の試みです(つまり、機能しないのは「ConfigureAsWcfClient」の部分です):
もちろん、プリプロセッサ ディレクティブも削除したいと思います。システムは、デコレータが存在するかどうかを自動的に検出する必要があります。「ローカル」実装は.Impl.dll という名前のアセンブリにあり、デコレータは * .ServiceProxy.*.dll という名前のアセンブリにあります。
ああ、ローカル以外のサービス (WCF 経由で呼び出されるサービス) の特別な処理を削除すると、常に「クライアント モデルにはエンドポイントが必要です」というエラー メッセージが表示されます。
どんな助けでも大歓迎です。
c# - ウィンザー施設でフォワードを追加する
登録されたコンポーネントに転送を追加するために使用する必要があるウィンザー機能があります。何らかの理由で、これを行う方法を理解できないようです。
イベントがバインドされておりComponentRegistered
、追加のインターフェイスを追加する必要があるものを除外できますが、転送を追加できないようです。これが私の施設にあるものです:
そして、私は次のインターフェースとクラスを持っています:
public interface ICanDoMagic
public interface IBasicInterface
public class BasicClass : IBasicInterface, ICanDoMagic
これがウィンザーへの登録です
container.Register(Component.For<IBasicInterface>().ImplementedBy<BasicClass>())
私が望んでいるのは、ユーザーが ICanDoMagic を実装するものを登録するときです (上記の登録のように)。そのクラスの ICanDoMagic インターフェイスも登録して、自分で登録する必要がないようにします。これは転送で行われると思いますが、追加する方法がわかりません。
c# - Windsor WCF クライアント - 構成に存在しない場合、「デフォルトのエンドポイント要素が見つかりませんでした」
Web/App.config ファイルでクライアント エンドポイントを明示的に定義しないと、Windsor WCF 機能でクライアント エンドポイントを生成できません。
コントラクト、クライアント、およびコールバックはサービス参照として生成されました。構成ファイルを使用せずにプログラムですべてを登録したいと考えています。ただし、エンドポイント情報が App/Web.config に存在しない場合、次のエラーが発生します。
エラー: ServiceModel クライアント構成セクションで、コントラクト 'ServiceReference1.IWcfContract' を参照する既定のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素に見つからなかったためである可能性があります。
登録
型付き工場
ファクトリーセレクター
クライアントの解決
この時点で、Web/App.config ファイルにエンドポイント情報があれば、すべて正常に動作します。取り出すと、上記のエラーが表示されます。ありがとう!
c# - WCFファシリティが怠惰ではなく積極的にサービスをインスタンス化する方法は? (ウィンザー城)
次のように、WindsorContainer に WCF サービスを登録しました。
オブジェクトは、TestService
最初の WCF 要求が作成されたときにインスタンス化されます。代わりに、次のように、必要なときに手動でインスタンス化することをお勧めします。
(例: ユーザーが GUI から [Turn ON] ボタンをクリックしたとき)。
サービスが開始されるまで、クライアントは接続時にエラーを受け取るだけです。
どうすればこれを達成できますか?
c# - トップ シェルフとウィンザー キャッスルを使用して WCF サービスをホストする
Topshelf を使用して wcf サービスを実行し、ウィンザー城を依存性注入のために使用しています。ホスト プログラムを直接実行すると問題が発生します。コンソール ホストとしては正常に動作しますが、Windows サービスとして起動しようとすると、同じプログラムでこのエラーが発生します。
以下は私の実装です:-
c# - TypedFactory のパラメーターはそれ以上バイパスされません
型付きファクトリがあります:
/li>IDataProvider にはいくつかの実装があります
- 一部の実装は ICalculator に依存しています
- ICalculator にはいくつかの実装があります。
構成クラスがあります:
/li>
ファクトリの Create メソッドを呼び出そうとすると、Windsor は IDataProvider の依存関係 (ICalculator) を解決しようとします。
ここでは、使用する ICalculator のバージョンを理解できるように、コンテナーで元のパラメーターからの情報を使用する必要があります。
アップデート
詳細を追加したいと思います:
- IDataProviderFactory を使用するクラスがあります。IDataProvider のライフサイクルを制御し、ファクトリを使用して時々作成および破棄します。したがって、このレベルでは、IDataProvider の実装については何も知りたくありません。電卓のない DataProvider が存在する可能性があります。
- 最初は、IDataProviderFactory の独自の実装があり、そこで ICalculator を解決して DataProvider に挿入できました。しかし、リサイクルに関しては、DataProvider を破棄していましたが、Windsor で何かを手動で解決する場合、明示的に解放する必要がある場合、破棄するだけでは十分ではないようです。
可能な解決策:
- これらすべてを手動で行うことはできますが、ほとんどの場合、キャスティングなどで美しさを損なうことになります。
- 必要に応じて、Calculator の型付きファクトリを DataProviders 実装に挿入し、そこで Calculator のライフサイクルを制御できます。例: 私は自分のファクトリで DataProvider を作成しましたが、それは必要ありません。リリースすると、コンテナは DataProvider の破棄を呼び出し、そこで独自のファクトリで Calculator をリリースします。
- ウィンザー方式?
c# - オープン ジェネリック型のキャッスル ウィンザー コンプレックス登録
データ処理用に 2 つのクラスがあります。
そして、私はこれらのようなモデルをたくさん持っています:
これらのインターフェースで:
Windsor コンテナーをジェネリックとして登録する方法、または登録することは可能ですが、MondoDbEntity は MongoDbProvider で使用され、MSQl モデルは SqlDataProvider で使用されます。
私はこれらを試しましたが、うまくいきませんでした:
事前にthx!