2012-02-21 3 views
3

По какой-то причине у меня есть код генерации ошибок для службы wcf с помощью мастера «Добавить ссылку на службу».Конечная точка несовместима с версией 1 проекта windows immersive

Custom tool warning: No endpoints compatible with version 1 of windows immersive project were found. C:\work\test_projects\CirMetro\Service References\SvcProxy\Reference.svcmap 1 1 CirMetro 

Вы знаете, как это исправить?

Мой образец службы WCF - это простой инструмент. Вот исходный код:

static void Main() 
{ 
    UiWcfSession.OnInitialize += ClientInitialize; 

    var baseAddresses = new Uri("net.tcp://localhost:9000/"); 

    var host = new ServiceHost(typeof(UiWcfSession), baseAddresses); 

    var reliableSession = new ReliableSessionBindingElement { Ordered = true, InactivityTimeout = new TimeSpan(24, 20, 31, 23) }; 
    var binding = 
     new CustomBinding(reliableSession, new TcpTransportBindingElement()) { ReceiveTimeout = TimeSpan.MaxValue }; 

    host.AddServiceEndpoint(typeof(IClientFulfillmentPipeService), binding, "svc"); 

    var metadataBehavior = new ServiceMetadataBehavior(); 
    host.Description.Behaviors.Add(metadataBehavior); 
    var mexBinding = MetadataExchangeBindings.CreateMexTcpBinding(); 
    host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "mex"); 

    host.Open(); 

    Thread.CurrentThread.Join(); 
} 

private static void ClientInitialize(int uiprocessid, string key) 
{ 
    Debug.WriteLine("ClientInitialize"); 
} 
+0

Существует [статья] (http://blogs.msdn.com/b/piyushjo/archive/2011/10/19/wcf-for-metro-apps-supported-functionality.aspx) красноречивым что подмножество WCF поддерживается для приложений WPF Metro. –

+0

Я прочитал эту статью. Сначала он появляется в поиске Google. Что именно мне нужно изменить в моем коде, чтобы его исправить? Потому что он говорит, что Metro поддерживает TcpBinding, который я использую. – expert

+0

Попробуйте использовать привязку Http MEX –

ответ

6

Я понял.

Очень жаль, что мы должны декомпилировать источники Visual Studio, чтобы узнать, что работает в метро вместо ссылки на несуществующие документации :-)

Короче говоря, я не могу использовать ReliableSession.

Если вы хотите получить дополнительную информацию C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.ServiceReference.Platforms.dll содержит функцию, которая проверяет, что поддерживается.

private static bool IsBindingSupported(Binding binding) 
{ 
    if ((!(binding is BasicHttpBinding) && !(binding is CustomBinding)) && (!(binding is WSHttpBinding) && !(binding is NetTcpBinding))) 
    { 
     return false; 
    } 
    if (binding is WSHttpBinding) 
    { 
     if (((WSHttpBinding) binding).ReliableSession.Enabled) 
     { 
      return false; 
     } 
     if (((WSHttpBinding) binding).TransactionFlow) 
     { 
      return false; 
     } 
     if (((WSHttpBinding) binding).MessageEncoding != WSMessageEncoding.Text) 
     { 
      return false; 
     } 
    } 
    if (binding is NetTcpBinding) 
    { 
     if (((NetTcpBinding) binding).ReliableSession.Enabled) 
     { 
      return false; 
     } 
     if (((NetTcpBinding) binding).TransactionFlow) 
     { 
      return false; 
     } 
    } 
    foreach (BindingElement element in binding.CreateBindingElements()) 
    { 
     if (element is TransportBindingElement) 
     { 
      if ((!(element is HttpTransportBindingElement) && (!(element is HttpsTransportBindingElement) || (element as HttpsTransportBindingElement).RequireClientCertificate)) && !(element is TcpTransportBindingElement)) 
      { 
       return false; 
      } 
     } 
     else if (element is MessageEncodingBindingElement) 
     { 
      if (!(element is BinaryMessageEncodingBindingElement) || (((BinaryMessageEncodingBindingElement) element).MessageVersion != MessageVersion.Soap12WSAddressing10)) 
      { 
       if (element is TextMessageEncodingBindingElement) 
       { 
        if ((((TextMessageEncodingBindingElement) element).MessageVersion != MessageVersion.Soap11) && (((TextMessageEncodingBindingElement) element).MessageVersion != MessageVersion.Soap12WSAddressing10)) 
        { 
         return false; 
        } 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
     else if (element is SecurityBindingElement) 
     { 
      if (!(element is TransportSecurityBindingElement)) 
      { 
       return false; 
      } 
      TransportSecurityBindingElement element2 = (TransportSecurityBindingElement) element; 
      if (!ValidateUserNamePasswordSecurityBindingElement(element2)) 
      { 
       if (((((element2.EndpointSupportingTokenParameters.Endorsing.Count == 1) && (element2.EndpointSupportingTokenParameters.Signed.Count == 0)) && ((element2.EndpointSupportingTokenParameters.SignedEncrypted.Count == 0) && (element2.EndpointSupportingTokenParameters.SignedEndorsing.Count == 0))) && ((element2.EndpointSupportingTokenParameters.Endorsing[0] is SecureConversationSecurityTokenParameters) && ((element2.MessageSecurityVersion == MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10) || (element2.MessageSecurityVersion == MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10)))) && ((element2.IncludeTimestamp && (element2.DefaultAlgorithmSuite == SecurityAlgorithmSuite.Default)) && (element2.SecurityHeaderLayout == SecurityHeaderLayout.Strict))) 
       { 
        SecureConversationSecurityTokenParameters parameters = (SecureConversationSecurityTokenParameters) element2.EndpointSupportingTokenParameters.Endorsing[0]; 
        if (parameters.RequireDerivedKeys || !(parameters.BootstrapSecurityBindingElement is TransportSecurityBindingElement)) 
        { 
         return false; 
        } 
        TransportSecurityBindingElement bootstrapSecurityBindingElement = (TransportSecurityBindingElement) parameters.BootstrapSecurityBindingElement; 
        if (!ValidateUserNamePasswordSecurityBindingElement(bootstrapSecurityBindingElement)) 
        { 
         return false; 
        } 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
     else if ((!(element is SslStreamSecurityBindingElement) || (element as SslStreamSecurityBindingElement).RequireClientCertificate) && !(element is WindowsStreamSecurityBindingElement)) 
     { 
      if (!(element is TransactionFlowBindingElement)) 
      { 
       return false; 
      } 
      if ((!(binding is WSHttpBinding) || ((WSHttpBinding) binding).TransactionFlow) && (!(binding is NetTcpBinding) || ((NetTcpBinding) binding).TransactionFlow)) 
      { 
       return false; 
      } 
     } 
    } 
    return true; 
}