Remoting Problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ron L

    #16
    Re: Remoting Problem

    Nicole

    I got it to work. The final code on the client side was:

    Private Sub ClientForm_Load (ByVal sender As System.Object, ByVal e As
    System.EventArg s) Handles

    MyBase.Load
    Dim _NWInfo As iNWInfo
    Dim serverURL As String =
    "http://localhost/dotNET/RemotingTest/NWInfo.rem"

    txtResults.Text = "Welcome to the client application." & vbCrLf
    txtResults.Text += "Console Identity: " +
    WindowsIdentity .GetCurrent().N ame

    _NWInfo =
    CType(Activator .GetObject(GetT ype(RemotingInt erface.iNWInfo) , serverURL),
    RemotingInterfa ce.iNWInfo)

    Dim channelproperti es As IDictionary
    channelproperti es =
    ChannelServices .GetChannelSink Properties(_NWI nfo)
    channelproperti es("credentials ") =
    CredentialCache .DefaultCredent ials

    txtResults.Text = txtResults.Text & vbCrLf & vbCrLf & "Trying to get
    the text message: "
    Try
    txtResults.Text = txtResults.Text & vbCrLf & _NWInfo.GetMess age
    Catch ex As Exception
    txtResults.Text = txtResults.Text & vbCrLf & ex.Message
    End Try

    txtResults.Text = txtResults.Text & vbCrLf & vbCrLf & "Trying
    GetMostExpensiv eProducts: "
    Try
    Dim dt As DataTable
    Dim row As DataRow
    dt = _NWInfo.GetMost ExpensiveProduc ts
    For Each row In dt.Rows
    txtResults.Text = txtResults.Text & vbCrLf & row.Item(0)
    Next
    Catch ex As Exception
    txtResults.Text = txtResults.Text & vbCrLf & ex.Message
    End Try

    txtResults.Sele ctionLength = 0
    End Sub

    I had a series of cascading errors in the previous code that I finally
    managed to untangle today.

    Thank you for the help.

    Ron L


    "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in message
    news:uC0ZpVGaFH A.1040@TK2MSFTN GP10.phx.gbl...[color=blue]
    >I can't see any obvious problems in your code. Do you still get a 401
    >error if you try to reproduce the simple sample from
    >http://msdn.microsoft.com/library/en...tinginiis.asp?
    >If not, what happens if you modify the client to use programmatic
    >configuratio n of the URL and credentials instead of reading these from the
    >config file?
    >
    >
    >
    > "Ron L" <ronl@bogus.Add ress.com> wrote in message
    > news:%23H31R5sZ FHA.3840@tk2msf tngp13.phx.gbl. ..[color=green]
    >> Nicole
    >> I have found the code you referenced as an example:
    >>
    >> IDictionary channelProperti es;
    >> channelProperti es = ChannelServices .GetChannelSink Properties(prox y);
    >> channelProperti es ["credential s"] =
    >> CredentialCache .DefaultCredent ials;
    >>
    >> The thing I am not able to come up with is where the variable "proxy" is
    >> set and what is it? If I try making it be the RemotingInterfa ce object
    >> in the code below, I still get my (401) Unauthorized error. Can you
    >> clear this up for me?
    >>
    >> TIA
    >> Ron L
    >>
    >> ------------------------------ Code
    >> Stub -------------------------------------------
    >> Sub Main()
    >> Dim _NWInfo As iNWInfo
    >> Dim serverURL As String =
    >> "http://localhost/dotNET/RemotingTest/NWInfo.rem"
    >>
    >> Console.WriteLi ne("Welcome to the client application.")
    >>
    >> _NWInfo =
    >> CType(Activator .GetObject(GetT ype(RemotingInt erface.iNWInfo) , serverURL),
    >> RemotingInterfa ce.iNWInfo)
    >>
    >> Dim channelProperti es As IDictionary
    >> channelProperti es =
    >> ChannelServices .GetChannelSink Properties(_NWI nfo)
    >> channelProperti es("credentials ") =
    >> System.Net.Cred entialCache.Def aultCredentials
    >> Console.WriteLi ne(channelPrope rties("credenti als"))
    >>
    >>
    >> Console.WriteLi ne(_NWInfo.GetM essage)
    >>
    >> Dim dt As DataTable
    >> Dim row As DataRow
    >> dt = _NWInfo.GetMost ExpensiveProduc ts
    >> For Each row In dt.Rows
    >> Console.WriteLi ne(row.Item(0))
    >> Next
    >> Console.WriteLi ne("Press the <enter> key to exit.")
    >> Console.Read()
    >> End Sub
    >> ------------------------------\Code
    >> Stub -------------------------------------------
    >>
    >>
    >>
    >> "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in message
    >> news:OE8hJrhZFH A.2788@TK2MSFTN GP12.phx.gbl...[color=darkred]
    >>> "Ron L" <ronl@bogus.Add ress.com> wrote in message
    >>> news:%23d6PdbhZ FHA.1424@TK2MSF TNGP15.phx.gbl. ..
    >>>> Nicole
    >>>> I have been attempting to wade through the reference you gave me (it
    >>>> was the same reference that Gregory gave). What I want my application
    >>>> to be able to do is to try the credentials of the currently logged in
    >>>> user, and if that fails prompt the user for a username and password.
    >>>> Is this two different instances of using specific credentials, or is it
    >>>> one instance of using default credentials and one of using specific
    >>>> credentials?
    >>>
    >>> If you want to allow falling back to user-provided credentials, you'll
    >>> need to do at least two things:
    >>>
    >>> 1. Use programmatic configuration of the credentials in your client
    >>> application rather than specifying the credentials using channel
    >>> attributes in the configuration file. An example of the programmatic
    >>> approach is shown in the "Programmat ic configuration" section of the
    >>> ".NET Remoting Security" reference.
    >>>
    >>> 2. Adjust the client code in #1 to attempt to connect to the server
    >>> and, if authentication fails, prompt the user for custom credentials
    >>> then switch over to using those credentials. An example of setting the
    >>> proxy to use such credentials is shown in the "Using specific
    >>> credentials" section of the ".NET Remoting Security" reference.
    >>>
    >>>
    >>>
    >>>> As to disabling automatic login (setting it to anonymous in Local
    >>>> Intranet, and trusted sites), I get the "You are not authorized to view
    >>>> this page" error page.
    >>>
    >>> Good news since this means that the user credentials automatically
    >>> provided by IE prior to disabling this behaviour were authenticating
    >>> successfully and permitting access to the server.
    >>>
    >>>
    >>>>
    >>>> Ron L
    >>>>
    >>>>
    >>>>
    >>>> "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in
    >>>> message news:u%23B0XIhZ FHA.3876@TK2MSF TNGP12.phx.gbl. ..
    >>>>> "Ron L" <ronl@bogus.Add ress.com> wrote in message
    >>>>> news:uIT6LpgZFH A.3960@TK2MSFTN GP10.phx.gbl...
    >>>>>> Nicole
    >>>>>> I guess I don't know how I am specifying the credentials on the
    >>>>>> client side.
    >>>>>
    >>>>> Then chances are very good that the client credentials aren't being
    >>>>> passed. See
    >>>>> http://msdn.microsoft.com/library/en...SecNetch11.asp
    >>>>> (particularly the "Passing Credentials for Authentication to Remote
    >>>>> Objects" section) for possible approaches.
    >>>>>
    >>>>>
    >>>>>> As I said to Gregory, I was assuming that IIS handled the credentials
    >>>>>> as it does for ASP.
    >>>>>
    >>>>> IIS will perform the user authentication, but only if the user's
    >>>>> credentials are passed from the client machine, which is something
    >>>>> that IIS cannot do. The transparent passing of client credentials that
    >>>>> you see when using IE to browse a Windows-authenticated intranet site
    >>>>> is because IE is configured to pass those credentials without user
    >>>>> intervention. You'll need to make it possible for your client
    >>>>> application to pass the same credentials.
    >>>>>
    >>>>>
    >>>>>> As to accessing the server, if I enter the following URL:
    >>>>>> http://localhost/dotNet/remotingtest/nwinfo.rem?wsdl
    >>>>>>
    >>>>>> I get an automatically generated web page listing the message names,
    >>>>>> port names, binding names, etc.
    >>>>>
    >>>>> What happens if you disable the intranet zone automatic logon in IE?
    >>>>>
    >>>>>
    >>>>>>
    >>>>>> Ron L
    >>>>>>
    >>>>>>
    >>>>>>
    >>>>>> "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in
    >>>>>> message news:%23yJ7ObgZ FHA.3712@TK2MSF TNGP09.phx.gbl. ..
    >>>>>>> That looks like your server config file, which isn't what I was
    >>>>>>> asking about. On the client, how are you specifying the credentials
    >>>>>>> that should be sent to the server? (If you don't know what this
    >>>>>>> question means, chances are excellent that you're not sending any
    >>>>>>> credentials, which would explain the authentication problem. <g>)
    >>>>>>> Also, could you please check if you can access the server via IE?
    >>>>>>>
    >>>>>>>
    >>>>>>>
    >>>>>>> "Ron L" <ronl@bogus.Add ress.com> wrote in message
    >>>>>>> news:O%231BRRgZ FHA.3096@TK2MSF TNGP15.phx.gbl. ..
    >>>>>>>> Nicole
    >>>>>>>> Thanks for your response. I am using a web.config file that I
    >>>>>>>> have included at the end of this message.
    >>>>>>>>
    >>>>>>>> Ron L
    >>>>>>>>
    >>>>>>>> --------------------------Start
    >>>>>>>> Web.Config ------------------------------------------------
    >>>>>>>> <?xml version="1.0" encoding="utf-8" ?>
    >>>>>>>> <configuratio n>
    >>>>>>>>
    >>>>>>>> <system.web>
    >>>>>>>> <compilation defaultLanguage ="vb" debug="true" />
    >>>>>>>> <customErrors mode="RemoteOnl y" />
    >>>>>>>> <authenticati on mode="Windows" />
    >>>>>>>> <authorizatio n>
    >>>>>>>> <allow users="*" /> <!-- Allow all users -->
    >>>>>>>> <allow verbs="GET" users="*" />
    >>>>>>>> </authorization>
    >>>>>>>> <trace enabled="false" requestLimit="1 0" pageOutput="fal se"
    >>>>>>>> traceMode="Sort ByTime" localOnly="true " />
    >>>>>>>> <sessionState
    >>>>>>>> mode="Off"
    >>>>>>>> />
    >>>>>>>> <globalizatio n requestEncoding ="utf-8" responseEncodin g="utf-8"
    >>>>>>>> />
    >>>>>>>>
    >>>>>>>> <identity impersonate="tr ue" />
    >>>>>>>>
    >>>>>>>> </system.web>
    >>>>>>>>
    >>>>>>>> <appSettings>
    >>>>>>>> <!-- Trusted_Connect ion=yes -->
    >>>>>>>> <add key="Connection String"
    >>>>>>>> value="Provider =SQLOLEDB;Data Source=Dev2k;In itial
    >>>>>>>> Catalog=Northwi nd;Integrated Security=SSPI;T rusted_Connecti on=yes "
    >>>>>>>> />
    >>>>>>>> </appSettings>
    >>>>>>>>
    >>>>>>>> <system.runtime .remoting>
    >>>>>>>> <application>
    >>>>>>>> <!-- the following section defines the classes we're exposing to
    >>>>>>>> clients from this host -->
    >>>>>>>> <service>
    >>>>>>>> <wellknown mode="SingleCal l"
    >>>>>>>> objectUri = "NWInfo.rem "
    >>>>>>>> type = "RemotingTest.N WInfo, RemotingTest" />
    >>>>>>>>
    >>>>>>>> </service>
    >>>>>>>> <channels>
    >>>>>>>> <channel ref="http"
    >>>>>>>> useDefaultCrede ntials="true" />
    >>>>>>>> </channels>
    >>>>>>>> </application>
    >>>>>>>> </system.runtime. remoting>
    >>>>>>>> </configuration>
    >>>>>>>> -------------------------- End
    >>>>>>>> Web.Config -----------------------------------------------
    >>>>>>>> "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in
    >>>>>>>> message news:uO2gxmfZFH A.3648@TK2MSFTN GP14.phx.gbl...
    >>>>>>>>> Have you set the remoting client to pass the default credentials
    >>>>>>>>> to the server? If so, how? Also, what happens when you attempt
    >>>>>>>>> to browse to the server URL in IE?
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>> "Ron L" <ronl@bogus.Add ress.com> wrote in message
    >>>>>>>>> news:eg4E7IeZFH A.3220@TK2MSFTN GP14.phx.gbl...
    >>>>>>>>>> We are working on a distributed VB.Net application which will
    >>>>>>>>>> access a SQL database located on a known server. Each client
    >>>>>>>>>> will run on the user's local machine. To implement this, we are
    >>>>>>>>>> trying to use remoting for our access to the SQL server, with the
    >>>>>>>>>> remoting being via IIS. Since all of our users will have accounts
    >>>>>>>>>> in the destination domain, we want to have IIS handle the
    >>>>>>>>>> security for us and not allow anonymous. We have set this up with
    >>>>>>>>>> one of our development clients and servers, but when we try to
    >>>>>>>>>> connect we get the following error message:
    >>>>>>>>>> An unhandled exception of type 'System.Net.Web Exception'
    >>>>>>>>>> occurred in mscorlib.dll
    >>>>>>>>>>
    >>>>>>>>>> Additional information: the remote server returned an error:
    >>>>>>>>>> (401) Unauthorized.
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>> Our configuration is this:
    >>>>>>>>>> Component Running on
    >>>>>>>>>> Module1 the development machine
    >>>>>>>>>> RemotingTest IIS on the development machine
    >>>>>>>>>> NorthWind DB SQL Server on another server
    >>>>>>>>>>
    >>>>>>>>>> IIS is configured for Windows Authentication, and the directory
    >>>>>>>>>> with the RemotingTest object has "Script Source Access" set and
    >>>>>>>>>> the Execute Permissions are set to "Scripts and Executables". We
    >>>>>>>>>> have also tried with setting IIS to Allow Anonymous, which moves
    >>>>>>>>>> the error out to the SQL connection (with the error message of
    >>>>>>>>>> "can't make a connection for user NULL"). Even if anonymous did
    >>>>>>>>>> work, it would be a problem for us since the application we are
    >>>>>>>>>> using requires the username to be accessible.
    >>>>>>>>>>
    >>>>>>>>>> The SQL server is in a different domain from development machine,
    >>>>>>>>>> however a trust relationship exists between the two domains. We
    >>>>>>>>>> have verified that the trust works by opening the NorthWind
    >>>>>>>>>> database in Enterprise Manager on the development machine.
    >>>>>>>>>>
    >>>>>>>>>> Can anyone tell us what we are doing wrong here?
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>
    >>>>>>>>
    >>>>>>>
    >>>>>>>
    >>>>>>
    >>>>>>
    >>>>>
    >>>>>
    >>>>
    >>>>
    >>>
    >>>[/color]
    >>
    >>[/color]
    >
    >[/color]


    Comment

    Working...