gpt4 book ai didi

wcf - Azure辅助角色中的外部HTTP端点可以吗?

转载 作者:行者123 更新时间:2023-12-03 21:27:01 25 4
gpt4 key购买 nike

我正在尝试在 Azure 上以辅助角色托管面向外部的 WCF 服务。

我有一个在本地运行得很好的解决方案,但是当我尝试将其发布到 Azure 时,它​​会进入初始化/繁忙/停止循环。

我在互联网上找到的信息有不同的说法:

http://www.theworkflowelement.com/2011/01/worker-role-service-hosting-faq.html (不可能)

http://code.msdn.microsoft.com/WCF-Azure-Worker-Role-on-b394df49 (可以通过 hack 实现)

其他消息来源说这是可能的,但我没有代表发布两个以上的链接。

当我尝试发布最后一篇文章时,它一直处于忙碌状态。

有人知道如何做到这一点,或者这真的不可能吗?如果将其托管在辅助角色中会非常好,这样我就不必使用 Web 角色所带来的 svc 和 web.config 困惑。

这是我正在使用的代码:

    [ServiceContract(Namespace = "")]
public interface IMyService
{
[OperationContract]
[WebGet]
string Echo(string s);
}

public class MyService : IMyService
{
public string Echo(string s)
{
return "hey " + s;
}
}

public class TestPasswordValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
}
}

private static void StartService()
{
var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["HttpsEndpoint"];
var uri = new Uri(endpoint.Protocol + "://" + endpoint.IPEndpoint + "/myservice");
var host = new ServiceHost(typeof(MyService), uri);

host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new TestPasswordValidator();

var mexBehavior = new ServiceMetadataBehavior();
mexBehavior.HttpsGetEnabled = true;
mexBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(mexBehavior);

var soapBinding = new WSHttpBinding(SecurityMode.TransportWithMessageCredential);
soapBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;

host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpsBinding(), "mex");
host.AddServiceEndpoint(typeof(IMyService), soapBinding, "Soap");

var restBinding = new WebHttpBinding(WebHttpSecurityMode.Transport);
restBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

var restEndpoint = host.AddServiceEndpoint(typeof(IMyService), restBinding, "");
restEndpoint.Behaviors.Add(new WebHttpBehavior { HelpEnabled = true, DefaultOutgoingResponseFormat = WebMessageFormat.Json, AutomaticFormatSelectionEnabled = true, DefaultBodyStyle = WebMessageBodyStyle.WrappedRequest });

host.Open();
}

public override void Run()
{
StartService();

while (true)
{
Thread.Sleep(10000);
}
}

public override bool OnStart()
{
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;

// For information on handling configuration changes
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

return base.OnStart();
}

最佳答案

我明白了为什么会发生这种情况。辅助角色需要以提升的权限运行才能打开 HTTP 端口。但是,此设置在角色设置 GUI 中不可用。 gui 显示的设置(我认为它控制了权限)是完全信任/部分信任。我想我不知道那是做什么的。

正确的设置位于 WorkerRole 下的 ServiceDefinition.csdef 文件中。

<Runtime executionContext="elevated" />

关于wcf - Azure辅助角色中的外部HTTP端点可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com