this example을 수행하려고 시도했습니다 (사이트의 링크 또는 here에서 소스 코드를 다운로드하지만 계속 포함됨) 예
합니다 (AppFabric SDK 및 기타 종속성을 설치 한 후) 다음과 같이 내 절차가있다 :..Azure에서 AppFabric ServiceBus를 사용하여 신뢰할 수있는 역할 간 통신 구현, IObserver 패턴
- 소스
- AppFabric에 서비스 네임 스페이스를 만들기 다운로드를
- I 하나의 작업자 역할이있는 새로운 Windows Azure 프로젝트로 프로젝트를 가져오고 모든 프로젝트가 컴파일되고 기본 Worker Role Run() 메서드가 시작되고 작동하는지 확인하십시오.
- InterRoleCommunicationExtension.cs의 GetInterRoleCommunicationEndpoint 메서드를 ServiceNameSpace로, IssuerSecret을 내 AppFabric Service 네임 스페이스 (IssuerName 및 ServicePath는 기본적으로 그대로 유지)에서 구성합니다. 이것은 내 자신의 매개 변수의 하드 배선입니다.
- 복사/
- 코멘트 아웃 참조 Tracemanager 내 프로젝트의 작업자 역할의 ONSTART() 메소드에 데모에서 "SampleWorkerRole.cs"파일에서 초기화 논리를 붙여 넣습니다. * 데모 코드를 가지고 있지 않는 한 Tracemanager 메소드가 구현되었으며이 테스트가 작동하는 데 중요하지 않습니다. 이러한 참조 중 약 7-10 개가 있습니다 (전체 솔루션에서 찾기 -> "Tracemanager"만 수행).
- 빌드가 성공적입니다.
- 로컬 Compute Emulator에서 실행하십시오. 나는 (
this.interRoleCommunicator = new InterRoleCommunicationExtension();
초기화 할 수있는 역할 간 통신 인프라의 첫 번째 조각) 새로운 InterRoleCommunicationExtension의 초기화 동안이 테스트를 실행하면
이 오류가 발생합니다 : "값은 null 일 수 없습니다 매개 변수. 이름 : 계약 유형. " 이것으로 조금 드릴링
, 나는 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을 확장합니다.
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 "이 방법은 빈 배열을 반환 원인 : serviceType.GetInterfaces() 호출은 다음과 같은 코드가 다음 FrameworkUtility.GetDeclarativeAttribute(serviceInterface);
으로 전달되는"System.IObservable`1 "인터페이스를 반환 null을 돌려주는 함수와 예외를 발생시키는 위의 메시지를 반환한다.
Publish/Subscribe 메시징 패러다임이 내 응용 프로그램을위한 완벽한 솔루션이라고 생각하므로이 시나리오를 작동하는 데 매우 관심이있다. 누구나이 데모 코드를 AppFabric CAT 팀 자체에서 얻을 수 있었습니까? 아니면 내 오류를 발견 할 수 있습니까? 도움을 주셔서 감사합니다.
내게로 돌아와 줘서 고마워. 귀하의 수정 내용이 내 개발 패브릭 상자에서 작동하는 것 같습니다.내가 Azure에서 실행하고 몇 가지 시나리오에서 어떻게 작동 하는지를 볼 수있을 때 나는 1, 2 주 후에 다시 여기에 게시 할 것입니다. 다시 감사합니다! – user483679