2012-08-25 58 views
2

我使用NetTcpBinding和Streamed TransferMode。现在我试图实现一个回调作为双工,但我得到了错误信息。可以将NetTcpBinding与Streamed TransferMode结合使用并使用(双工)回调服务契约? 背景: - 我使用NetTcpBinding,因为它速度很快并且没有nat问题 - 我使用流式传输模式,因为我也传输大文件。WCF,NetTcpBinding,流传输模式可以是双工的?

的配置:

<netTcpBinding> 
    <binding name="DuplexBinding" transferMode="Streamed" 
       closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600" 
      > 
     <readerQuotas maxDepth="104857600" maxStringContentLength="104857600" maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600"/> 
     <reliableSession enabled="true" ordered="true" inactivityTimeout="00:10:00"/> 
     <security mode="None" /> 
    </binding> 
    </netTcpBinding> 

合同:

IMyDataService.cs 

    [ServiceContract(CallbackContract = typeof(INotifyCallback))] 
    public interface IMyDataService 
    { 
     [OperationContract(ProtectionLevel = System.Net.Security.ProtectionLevel.None)] 
     [FaultContract(typeof(MyFaultException))] 
     [FaultContract(typeof(MyUserAlreadyLoggedInFaultException))] 
     [FaultContract(typeof(AuthorizationFaultException))] 
     Guid Authenticate(Guid clientID, string userName, string password, bool forceLogin); 
    } 


INotifyCallback.cs 

    public interface INotifyCallback 
    { 
     [OperationContract(IsOneWay = true)] 
     void ShowMessageBox(string message); 
    } 

我有得到错误了when设置transferMode = “流”

合同要求双面打印,但绑定 'NetTcpBinding的'不支持 它或未正确配置以支持它。

每个人都可以建议感谢

+0

您是否使用DuplexChannelFactory连接到服务器(或者只是一个ChannelFactory)? – EthanB

+0

我使用IMetadataExchange添加servicereferece并创建客户端代理 –

回答

1

在您的客户端代码,请确保您使用DuplexChannelFactory创建到服务器的通道:

INotifyCallback callbackObject = new NotifyCallbackImpl(); //your concrete callback class 
var channelFactory = new DuplexChannelFactory<IMyDataServce>(callbackObject); //pick your favourite constructor! 
IMyDataService channel = channelFactory.CreateChannel(); 
try { 
    var guid = channel.Authenticate(....); 
    //... use guid... 
} finally { 
    try { 
     channel.Close(); 
    } catch (Exception) { 
     channel.Abort(); 
    } 
} 

[编辑]一个自动的代理生成的服务参考应该延伸DuplexClientBase

+0

您误解了我的问题。我的问题是当前服务器不运行配置当我设置属性transferMode =“流”,如果是删除它服务器运行,但我想用大文件上传应transferMode =“流”很好选择 –

+0

服务器端问题。得到它了。 – EthanB

+0

是的,与配置atrribute transferMode =“流”,默认它设置transferMode =“缓冲区”,但在我的情况下使用dublex它的问题 –