サブスクライバキューがメッセージを受信していません。彼らはエラーキューに終わっているようです。nServiceBusユーザを登録していますが、ユーザはメッセージを受信していません。
唯一の珍しい点は、Webサイト(およびクラスライブラリ)から生成され、Webサイト/クラスライブラリに代わって発行するパブリッシャにWCFされたメッセージをパブリッシャが受信していることです。
パブリッシャーの<add Messages="">
を削除した場合、パブリッシャーはメッセージのルーティング先を知らないというエラーが表示されます。
メッセージの宛先が指定されていません。 Messages.ContactRequest。メッセージ は送信できません。 設定ファイルの UnicastBusConfigセクションを確認し、メッセージタイプが の場合は MessageEndpointMappingが存在することを確認してください。
ヘルプ!私はWcfIntegrationとPubSubのサンプルをほぼcut'n'pastedしたので、私はそれが動作していない理由を知らない!
PUBLISHER:
<MsmqTransportConfig
InputQueue="RSApp_InputQueue"
ErrorQueue="error"
NumberOfWorkerThreads="1"
MaxRetries="5"
/>
<UnicastBusConfig
DistributorControlAddress=""
DistributorDataAddress=""
ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="RSApp_InputQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
加入:
<!-- SUBSCRIBER -->
<MsmqTransportConfig
InputQueue="RSApp_SubscriberQueue"
ErrorQueue="error"
NumberOfWorkerThreads="1"
MaxRetries="5"
/>
<UnicastBusConfig
DistributorControlAddress=""
DistributorDataAddress=""
ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="RSApp_InputQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
P.S. nservicebusによって自動的に作成されたWCFエンドポイントも自動的にbus.publish <>()メッセージを送信しますか?
p.s.
[のServiceContract] パブリックインターフェイスIContactRequestService { [OperationContract(アクション= "http://tempuri.org/IWcfServiceOf_ContactRequest_ErrorCodes/Process"、 ReplyAction = - :私はこれを行うために必要なものを理解していません"http://tempuri.org/IWcfServiceOf_ContactRequest_ErrorCodes/ProcessResponse")] ErrorCodesプロセス(Messages.ContactRequest request); }
ここに私のクライアントは、呼び出し元のコード: - 奇妙はWCFを使用せずにバスにメッセージを置くことは御馳走を動作することです何
public void MakeContactRequest(int id, Guid RequestingUserId, Guid RequesteeUserId, Messages.ContactRequestType type)
{
//get extra information
var u = Services.UserService.FetchUserProfile(id);
//add it to local database
var RequestIdentifier = Guid.NewGuid();
//create message
var req = new ContactRequest()
{
contactRequestType = type,
Name = u.DisplayName,
RequestCreationDate = DateTime.Now,
TagLine = u.Tagline,
RequesterUserId = RequestingUserId,
RequesteeUserId = RequesteeUserId,
RequestIdentifier = RequestIdentifier
};
//drop it onto distributed message queue
IContactRequestService client = ChannelFactory.CreateChannel();
try
{
ErrorCodes returnCode = client.Process(req);
}
finally
{
try
{
((IChannel)client).Close();
}
catch
{
((IChannel)client).Abort();
}
}
}
!!
public void Run()
{
Console.WriteLine("This will publish IEvent and EventMessage alternately.");
Console.WriteLine("Press 'Enter' to publish a message.To exit, Ctrl + C");
bool publishIEvent = true;
while (Console.ReadLine() != null)
{
var eventMessage = publishIEvent ? Bus.CreateInstance<ContactRequest>() : new ContactRequest();
Bus.Publish(eventMessage);
Console.WriteLine("Published event ");
publishIEvent = !publishIEvent;
}
ありがとうアダム - クライアント側でエラーが発生しています.client.publish(wcfintegrationサンプルを参照)を呼び出すとエラーが発生しています。何かご意見は? WCFの問題だろうか?ロギングに苦労しています... –
あなたはあなたのBus.Publish()をCancelOrderHandlerのServerプロジェクトに入れておくべきです。クライアントからのパブリッシュは推奨されません。プロファイルのログを上書きする場合は、IConfigureLoggingForProfileを実装するだけです。 –
私は何を意味するのかを示すサンプルプロジェクトをまとめました.http://bit.ly/hM4qDw –