MSMQ和WCF消息在专用队列中不可见

Ren*_*ion 1 wcf msmq

有一些类似的问题,我对MSMQ非常新.

我一直在尝试将ServiceContract和关联的DataContract链接到MSMQ,并设置了端点,以便DataContact消息在MSMQ中结束.

我已经验证了WCF服务正确生成了消息,我还可以看到消息在我发送到的队列的日志中,但不在我期望它们的实际"排队消息"区域中.

我目前没有使用交易,我已将安全性设置为无.我附上相关的代码,虽然我的感觉是我因为无知MSMQ而缺少一些基本的东西.任何指针将不胜感激.

服务和数据合同

[DataContract]
public class RegistrationMessage : IRegistrationMessage
{
    [DataMember]
    public string EMailAddress { get; set; }
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string LastName { get; set; }
}

[ServiceContract]
public interface IRegistration
{
    [OperationContract(IsOneWay = true)]
    void Register(RegistrationMessage message);
}
Run Code Online (Sandbox Code Playgroud)

WCF主机的app.config

<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MetaDataBehaviour">
                    <serviceMetadata httpGetEnabled="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <netMsmqBinding>
                <binding name="msmq" 
                         deadLetterQueue="System" durable="true"
                         exactlyOnce="false" 
                         receiveContextEnabled="false" 
                         useMsmqTracing="true">
                    <security mode="None" />
                </binding>
            </netMsmqBinding>
        </bindings>
        <services>
            <service behaviorConfiguration="MetaDataBehaviour" name="Client.AuthenticationService.RegistrationService">
                <endpoint address="net.msmq://localhost/private/AuthenticationQueue"
                    binding="netMsmqBinding" 
                    bindingConfiguration="msmq" name="msmq"
                    contract="Global.DomainModel.IRegistration" />
                <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8080/Registration/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Joh*_*ell 5

我不知道WCF,但我可以对MSMQ方面发表评论.

"我已经验证了WCF服务正确生成了消息,我还可以看到消息在我发送给的队列的日志中,但不在我期望的实际排队消息区域中."

这意味着邮件已传递和处理.
与队列关联的日志消息仅在消息已传递然后由应用程序读取/接收时创建.
如果消息刚刚传递但未读取/接收,则不会创建日志消息,并且原始消息将保留在目标队列中.
如果邮件已发送但随后被清除/删除,则不会创建日记邮件,因为应用程序未成功读取/接收原始邮件.

干杯
约翰休斯威尔