gpt4 book ai didi

azure - 使用 Azure 上的 AppFabric 服务总线实现可靠的角色间通信,观察者模式

转载 作者:行者123 更新时间:2023-12-04 06:34:24 25 4
gpt4 key购买 nike

我一直在尝试关注 this example (从网站上的链接或 here 下载源代码,但我一直遇到一个似乎嵌入在示例中的错误。
我的程序如下(在安装 AppFabric SDK 和其他依赖项之后):

  • 下载源码
  • 在 AppFabric 上创建服务命名空间。
  • 将项目导入具有一个 Worker Role 的新 Windows Azure 项目,确保它全部编译并且默认的 Worker Role Run() 方法启动并运行。
  • 使用我的 AppFabric 服务命名空间中的 ServiceNameSpace 和 IssuerSecret 配置 InterRoleCommunicationExtension.cs 中的 GetInterRoleCommunicationEndpoint 方法(IssuerName 和 ServicePath 保持默认)。这是我自己的参数的硬接线。
  • 将演示中“SampleWorkerRole.cs”文件中的初始化逻辑复制/粘贴到我项目的 Worker Role
  • 的 OnStart() 方法中
  • 注释掉对 Tracemanager.* 的引用,因为演示代码没有实现 Tracemanager 方法,它们对于此测试的工作并不重要。这些引用文献中大约有 7-10 个(只需在整个解决方案中执行 Find -> "Tracemanager")。
  • 构建成功。
  • 在本地计算模拟器上运行。

  • 当我运行这个测试时,在初始化一个新的 InterRoleCommunicationExtension(要初始化的角色间通信基础设施的第一部分, this.interRoleCommunicator = new InterRoleCommunicationExtension();)期间,引发了一个错误: “值不能为空。参数名称:contractType。”
    深入研究一下,我在 ServiceBusHostFactory.cs(示例文件之一)中执行以下方法: public static Type GetServiceContract(Type serviceType)
    {
    Guard.ArgumentNotNull(serviceType, "serviceType");


            Type[] serviceInterfaces = serviceType.GetInterfaces();

    if (serviceInterfaces != null && serviceInterfaces.Length > 0)
    {
    foreach (Type serviceInterface in serviceInterfaces)
    {
    ServiceContractAttribute serviceContractAttr = FrameworkUtility.GetDeclarativeAttribute<ServiceContractAttribute>(serviceInterface);

    if (serviceContractAttr != null)
    {
    return serviceInterface;
    }
    }
    }

    return null;
    }
    serviceType 参数的 Name 属性是“IInterRoleCommunicationServiceContract”,它是演示的类之一,它扩展了 IObservable。对 serviceType.GetInterfaces() 的调用返回“System.IObservable`1”接口(interface),然后将其传递给 FrameworkUtility.GetDeclarativeAttribute(serviceInterface); ,其中包含以下代码:
    public static IList GetDeclarativeAttributes(Type type) where T : class
    {
    Guard.ArgumentNotNull(type, "type");


            object[] customAttributes = type.GetCustomAttributes(typeof(T), true);
    IList<T> attributes = new List<T>();

    if (customAttributes != null && customAttributes.Length > 0)
    {
    foreach (object customAttr in customAttributes)
    {
    if (customAttr.GetType() == typeof(T))
    {
    attributes.Add(customAttr as T);
    }
    }
    }
    else
    {
    Type[] interfaces = type.GetInterfaces();

    if (interfaces != null && interfaces.Length > 0)
    {
    foreach (object[] customAttrs in interfaces.Select(iface => iface.GetCustomAttributes(typeof(T), false)))
    {
    if (customAttrs != null && customAttrs.Length > 0)
    {
    foreach (object customAttr in customAttrs)
    {
    attributes.Add(customAttr as T);
    }
    }
    }
    }
    }

    return attributes;
    }</code><br>
    It is here that the issue arises. After not finding any customAttributes on the "IObservable1" type, it calls type.GetInterfaces(), expecting a return. Even though type is "System.IObservable 1"此方法返回一个空数组,这会导致函数返回 null 并引发带有上述消息的异常。

    我对让这个场景正常工作非常感兴趣,因为我认为发布/订阅消息传递范式是我的应用程序的完美解决方案。有没有人能够让这个演示代码(来自 AppFabric CAT 团队本身!)工作,或者可以发现我的错误?感谢您的帮助。

    最佳答案

    在原始博客文章中回答(见下面的链接)。如果您仍然遇到问题,请告知。我们致力于尽最大努力支持我们的 sample 。

    http://blogs.msdn.com/b/appfabriccat/archive/2010/09/30/implementing-reliable-inter-role-communication-using-windows-azure-appfabric-service-bus-observer-pattern-amp-parallel-linq.aspx#comments

    关于azure - 使用 Azure 上的 AppFabric 服务总线实现可靠的角色间通信,观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009858/

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