2014-09-25 11 views
0

Microsfot UDDI 서버를 실행하기 위해 하나의 BizTalk Server를 구성했습니다. 하나의 Active Directory 그룹을 UDDI의 관리자 그룹으로 구성했습니다.C#을 사용하여 Microsoft UDDI3 API로 UDDI Provider를 편집 할 수없고 제공자 소유자가 아닙니다.

UDDI 웹 사용자 인터페이스를 사용할 때 공급자를 만들 수 있으며 "소유 한 데이터보기"단추를 사용하여 다른 사용자가 소유 한 데이터 (공급자, 모델 등)를 볼 수 있습니다.

C#에서 Microsoft.Uddi3.dll API를 사용하여 클라이언트 원격 응용 프로그램의 UDDI 항목을 관리하는 Windows 양식 대화 상자를 만들었으며 다른 사용자가 만든 공급자를 볼 때 사용할 수 있지만 다른 사용자가 소유 한 공급자는 관리자 일 때도 실제 소유자가 아니기 때문에 Microsoft.Uddi3.UserMismatchException을 throw합니다 (엔터티 uddi : xxxxxxxx-xxxx-xxxx-xxxxxxxxxxx는 게시자가 소유하지 않음). UDDI 내에서. 필자가 제작 한 Provider에 대해이 스크립트를 사용하면 에디션이 정상적으로 작동합니다. 내 사용자가 공급자를 만든 사용자가 아닌 경우 문제가 발생합니다.

웹 UI가 데이터를 보려는 사용자 소유자를 설정하는 UDDI.Web.DLL에서 ViewAsPublisher.Set (문자열 사용자 이름)이라는 메서드를 사용하는 것을 보았지만 클라이언트 컴퓨터에서 불행한 결과. 이 DLL은 서버에서 사용하기 위해 개발되었으며 클라이언트에서 사용하기에는 의미가 없지만 웹 사용자 인터페이스에서 허용되는 것과 비슷한 기능이 필요하다고 생각합니다.

또한 Microsoft.Uddi3.dll은 소유권을 이전 할 수있는 기능을 제공하지만 웹 UI에서 동일한 동작을 수행하면됩니다. 즉, 실제 소유자 인 것처럼 제공자를 직접 수정하는 것입니다. toan 관리자, 게시자 또는 코디네이터 그룹에 속합니다.

구성에 문제가 있는지, 아니면 Uddi3 API 방법에 제한이 있는지는 잘 모르겠습니다.

아무도 도와 줄 수 있습니까?

미리 감사드립니다.

+0

코드 스 니펫을 게시 할 수 있습니까? 귀하의 고객이 정확하게 인증하지 못하는 것 같습니다. 평일의 남쪽 메커니즘은 – spy

답변

0

여기에 제공자 (예 : 이름 및 설명)를 수정하는 데 사용되는 코드가 있습니다.

private void ConnectToUddi() 
    { 
     if (!uddiServer.EndsWith("/")) 
      uddiServer = uddiServer + "/"; 
     string inquireURL = uddiServer + "inquire.asmx"; 
     string publishURL = uddiServer + "publish.asmx"; 
     string extensionURL = uddiServer + "extension.asmx"; 

     UddiSiteLocation location = new UddiSiteLocation(inquireURL, publishURL, extensionURL); 
     _connection = new UddiConnection(location); 
     _connection.AutoGetAuthToken = true; 
     _connection.AuthenticationMode = AuthenticationMode.WindowsAuthentication; 
    } 

그런 다음 연결이 여기에 사용됩니다 :

우리는 다음과 같은 정보와 함께 사용되는 _connection 매개 변수를 사용

  BusinessEntity entity = tree.SelectedNode.Tag as BusinessEntity; 
      GetBusinessDetail businessDetails = new GetBusinessDetail(entity.BusinessKey); 
      BusinessDetail businessDet = businessDetails.Send(_connection); 
      if (businessDet != null && businessDet.BusinessEntities.Count > 0) 
      { 
       BusinessEntity be = businessDet.BusinessEntities[0]; 
       ProviderProperties providerProperties = new ProviderProperties(be); 
       if (providerProperties.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       { 
        be.Names[0].Text = providerProperties.ProviderName; 
        if (providerProperties.ProviderDescription.Length > 0) 
        { 
         Description description = new Description(providerProperties.ProviderDescription); 
         be.Descriptions.Clear(); 
         be.Descriptions.Add(description); 
        } 
        else 
         be.Descriptions.Clear(); 
        SaveBusiness saveBusiness = new SaveBusiness(be); 
        saveBusiness.Send(_connection); 

        BeginRefresh(); 
       } 
      } 

그것은 내가 작성 공급자에 대한 제대로 작동을하지만, 할 때 다른 사용자가 공급자 (예 : 이름)를 수정하려고 시도하고 Microsoft.Uddi3.UserMismatchException을 던지는 API를 사용합니다.

감사합니다 !!!

0

David 이렇게 소리가났습니다. Uddi는 액세스 제어 규칙을 지원합니다. 소유하지 않은 기록을 변경하려면 권한을 경고하거나 관리자로 로그인해야합니다.

+0

으로 설정되었습니다. 감사합니다. 스파이! 문제는 내가 UDDI Windows 인증을 사용하여 관리자로 로그인했지만 API가 관리자 일지라도 실제 소유자가 아니며 예외가 발생한다는 것입니다. 웹 UI에서 Core UDDI DLL에 ViewAsPublisher.Set (username)이라는 메서드가 있고이 메서드를 사용하면 관리자이기 때문에 다른 사용자 (나 소유가 아닌)가 만든 공급자를 웹 UI에서 관리 할 수 ​​있습니다.그러나 이는 웹에서만 허용되며 예를 들어 클라이언트 응용 프로그램에서 API를 사용하지 않습니다. –

+0

위임 플래그에 대한 트러스트 계정을 시도해 볼 가치가 있습니다. 나는 코드에 옵션이 있다고 생각한다. – spy

+0

고마워! 위임 플래그에 대한 트러스트 계정을 통해 UDDI 서비스 응용 프로그램 풀을 실행하는 컴퓨터/사용자를 해당 플래그와 함께 조사했습니다. Active Directory에서 컴퓨터 옵션으로 시도했지만 성공하지 못했습니다. 언급 한 코드의 옵션은 어디에 있습니까? –