2012-03-14 4 views
0

IIS (BasicHTTPBinding 사용)에서 호스팅되는 WCF 서비스를 사용하는 WPF 클라이언트 응용 프로그램이 있습니다. 저는 SSL 및 기본 인증으로 이동하려고합니다. 왜냐하면 우리는 오프 도메인 PC에서이 앱을 사용할 사용자가 있기 때문입니다. 나는 서비스 객체 (우리는 ProxyGenerator라고 부름)의 인스턴스를 만들고 반환하는 클래스를 가지고 있으며, username (문자열)과 password (securestring)를 저장한다. 흐름은
내 앱 수명 동안 wcf 바인딩에 대한 자격증 명 유지

  1. 로그인 창에는 텍스트 상자, 암호 상자 및 로그인 버튼이 있습니다. 로그인 버튼을 누르면 proxygenerator 객체를 생성은 사용자 이름과 암호의 설정하고,에 (파라미터 스레드 시작을 통해)에 전달 :

  2. 메인 창, 리얼 Work®을 할 수있는 사용자 인터페이스를 포함하고 사용할 프록시를 얻을 수 ProxyGenerator.GetProxy()를 호출 . 프록시에 액세스해야 (메인 창에 포함)

        3.     UserControl1을 : 우리가 얻을 때까지

이 확인을 작동하는 것 같다.

도메인 외부 액세스의 필요성을 감안할 때이를 처리하는 가장 이상적인 방법은 무엇입니까? 이상적으로 모든 사람이 도메인에있을 것이고 나는 iis를 통해 windows 인증을 사용할 수 있습니다. (따라서 내가 필요할 때마다 시스템에서 사용자 자격 증명을 얻습니다.) 이것이 실제로 현재 작동하는 방식입니다.)

참고 : 이것은 "지금 작동 중이고 나중에 해결할"프로젝트입니다. 또한, 나는이 서비스에 대해 좀 새로운 것이므로 프록시가 잘못된 단어 일 수도 있고 잘못된 컨텍스트에서 사용할 수도 있습니다.

public class ProxyGenerator 
{ 

    public string username; 
    public SecureString password; 
    public string endpoint; 

    private TestingService.ServiceClient _proxy = null; 

    public ProxyGenerator(string uname, SecureString pword) 
    { 
     username = uname; 
     password = pword; 

     endpoint = "insert endpoint here" 

    } 

    public TestingService.ServiceClient GetProxy() 
    { 
     _proxy = new ServiceClient(endpoint); 
     _proxy.ClientCredentials.UserName.UserName = username; 
     _proxy.ClientCredentials.UserName.Password = password; 

     return _proxy; 
    } 
} 

답변

0

글쎄, 여기에 언젠가는 끝난 사람을 위해. 내가 대답하지 않은 질문이 싫어!

먼저, 실제로 일어난 일에 대해 파악해야했고 애플리케이션 시작이 그다지 제대로 수행되지 않아야한다는 것을 깨달았습니다. app.xaml/cs는 loginwindow를 호출하고 loginwindow는 자격 증명을 요청한 다음 위의 클래스를 자격 증명과 함께 인스턴스화합니다 (?). 그런 다음 MainWindow를로드하고 클래스의 인스턴스를 전달하는 새 스레드를 만듭니다. 스레드는 클래스의 인스턴스로 mainwindow 생성자를 호출하고 프로그램이 시작됩니다. 이것은 모두 완료되었으므로 기다리는 동안 로그인 윈도우에 약간의 애니메이션이 생길 수 있습니다.

내가 한 것은 Window를 상속 한 새로운 클래스를 만들고 SetProxyGenerator() 메서드와 ProxyGenerator 객체를 사용하여 확장 한 것입니다. 나는 새로운 데이터를 보거나 창을 요청하여 새로운 클래스를 상속 받았다. 그런 다음 프로그램의 흐름을 변경하여 주 창을 먼저로드하고 생성자에서 다른 간단한 로그인 창을 호출합니다. 정보로 프록시 제네레이터를 구축하고, 이제는 내가 만든 모든 새 창으로 전달합니다. 모든 것이 이제는 동일한 스레드에 있으며 기능적입니다.

시작이 너무 복잡하게 만든 이유를 전혀 생각이 ...

어쩌면 다음에 너희들은 내 질문에 대답 할 수 있습니다. :)

관련 문제