Endpoint 与 Windows 沉浸式项目版本 1 不兼容

发布于 2025-01-07 17:19:05 字数 1321 浏览 1 评论 0原文

由于某种原因,我使用“添加服务引用”向导为 wcf 服务生成代码时出错。

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");
}

For some reason I have error generating code for a wcf service using "Add service reference" wizard.

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

Do you guys know how to fix it ?

My sample WCF service is braindead simple. Here is source code:

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");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

明月松间行 2025-01-14 17:19:05

我想通了。

不幸的是,我们必须反编译 Visual Studio 的源代码才能找出 Metro 中有效的内容,而不是参考不存在的文档:-)

简而言之,我无法使用 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;
}

I figured it out.

It's unfortunate that we have to decompile sources of Visual Studio to find out what works in Metro instead of referring to non-existent documentation :-)

In short I can't use ReliableSession.

If you want more details C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.ServiceReference.Platforms.dll contains function which check what is supported.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文