WCF&x2B;Azure=噩梦!

WCF&x2B;Azure=噩梦!,azure,Azure,我花了一周的时间试图在Azure上获得一个安全的WCF格式,但都没有用!我的用例非常简单。我想在云中调用WCF端点,并传递要排队等待工作者角色的消息。除此之外,我想限制预授权用户的访问权限,通过用户名和密码进行身份验证 我已经尝试使用Transport、TransportWithMessageCredential和消息安全性来实现这一点,但似乎没有任何效果。事实上,我已经研究了我能找到的每个示例和代码片段,最近的一个例子是页面上的“使用二进制HTTP绑定、传输安全性和消息凭据以及Silverli

我花了一周的时间试图在Azure上获得一个安全的WCF格式,但都没有用!我的用例非常简单。我想在云中调用WCF端点,并传递要排队等待工作者角色的消息。除此之外,我想限制预授权用户的访问权限,通过用户名和密码进行身份验证

我已经尝试使用Transport、TransportWithMessageCredential和消息安全性来实现这一点,但似乎没有任何效果。事实上,我已经研究了我能找到的每个示例和代码片段,最近的一个例子是页面上的“使用二进制HTTP绑定、传输安全性和消息凭据以及Silverlight客户端的服务”。我很确定我被一些小错误和beta版的改动打倒了,但最终的结果是我完全被卡住了


这对我来说是一个关键路径项目,因此任何建议都将不胜感激。一个完整的工作示例或演练会更好

无法回答您的问题本身-但您是否已签出:


我在通过用户名和密码保护我的web服务时遇到了很多问题。我最终选择了通过证书的消息安全性,它似乎更容易实现。

我只知道如何处理匿名用户,但也许我的设置会让您帮助您解决这个问题。我知道下面的代码与匿名用户一起工作,也许您可以修改它以使其与身份验证一起工作。此外,保护Web端点的唯一方法是使用传输安全性(源:)通过HTTPS公开它

web.config

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
  </system.serviceModel>
ExampleService.svc.cs标记

<%@ ServiceHost Language="C#" Debug="true" Service="WebPages.Interfaces.ExampleService" CodeBehind="ExampleService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
来自客户端的jQuery呼叫

function _callServiceInterface(id, delegate) {
    var restApiCall = "Interfaces/ExampleService.svc/GetSomething?id="
            + escape(id);

    $.getJSON(restApiCall, delegate);
}

function _getSomethingFromService() {
    _callServiceInterface('123',
        function (result) {
            var parsedResult = $.parseJSON(result);
            $('#info').html(result.SomethingReturnedFromServiceCall);
        }
    );
}

老问题,我不完全确定您的解决方案失败在哪里,但据我所知,您需要一个来自公认可信来源的数字证书,而不仅仅是一个私人创建的证书,以使WCF与Azure一起工作


如果你不使用一个,那么据我所知,WCF将失败,但没有真正说明原因。因此,您可以最终追踪一个实际上不存在的代码错误的幽灵

如果你能补充你遇到的具体问题的细节,这将有助于任何回答你的人。现在,这本身不是什么问题。很抱歉,没有提供详细信息!基本上,我希望有一个安全的服务,WinGUI应用程序可以调用该服务将交易和其他相关的“任务”发布到Azure队列。所有的任务都是无状态且幂等的。数十个用户都需要向服务传递凭据,以便进行身份验证和授权。至于安全模式,我更喜欢消息安全,但也可以使用TransportWithMessageCredential安全。除此之外,我对使用.NET服务总线持开放态度,但尚未找到适合我的示例。您是否专门寻找仅使用用户名和密码的WCF呼叫身份验证?首先,这不是gimmecodez网站,因此您应该表明您已经完成了此项工作。实现这一点的最佳方法是展示您的代码。此外,根据标题,你似乎在责怪技术,而不是寻找问题的解决方案。我的建议是在发布问题之前查看常见问题。Aaron,你是否在Azure云上部署了此功能?或者这是一个带有证书的普通vanila WCF安全端点?
namespace WebPages.Interfaces
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class ExampleService : IExample
    {
        string JsonSerializeSomething(Something something)
        {
            var serializer = new DataContractJsonSerializer(something.GetType());
            var memoryStream = new MemoryStream();

            serializer.WriteObject(memoryStream, something);

            return Encoding.Default.GetString(memoryStream.ToArray());
        }

        public string GetSomething(string id)
        {
            var something = DoSomeBusinessLogic(id);

            return JsonSerializeSomething(something);
        }
    }
}
function _callServiceInterface(id, delegate) {
    var restApiCall = "Interfaces/ExampleService.svc/GetSomething?id="
            + escape(id);

    $.getJSON(restApiCall, delegate);
}

function _getSomethingFromService() {
    _callServiceInterface('123',
        function (result) {
            var parsedResult = $.parseJSON(result);
            $('#info').html(result.SomethingReturnedFromServiceCall);
        }
    );
}