2010-05-17 2 views
-1

나는이 특정한 오류 메시지에 대한 해결책을 이미 여기에서 발견했습니다. 하지만 제 경우는 약간 다릅니다. 내 코드에는 "비공개"또는 "정적"메소드가 없습니다. 모두 공개입니다. 내가 한 일은 표시 및 사용을 위해 한 프로세스에서 다른 프로세스로 작성된 FrameworkElement (특히 웹 브라우저 컨트롤)를 전달하는 것입니다. 또한 나는 프레임 워크 3.5 addin stuff를 사용하지 않고 사용하지 않을 것이다.권한이 거부되었습니다. 비공개 또는 정적 메서드를 원격으로 호출 할 수 없습니다.

매번 다음 행에 오류가 발생합니다. 위의 라인이 FrameworkElement로 변환한다고 가정하는 INativeHandleContract를 반환 tab.ReturnBrowserObject

fe = FrameworkElementAdapters.ContractToViewAdapter(tab.ReturnBrowserObject)

.

편집 : 코드 호스트 프로세스의 관련 코드.

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click 
     'Try 
     Dim h As EventWaitHandle 
     g = Guid.NewGuid() 
     h = New EventWaitHandle(False, EventResetMode.ManualReset, "Tab" & g.ToString) 
     StartTabProcess() 
     Dim f As Boolean = h.WaitOne(New TimeSpan(0, 0, 10), False) 
     If f = False Then 
      p.Kill() 
     End If 
     CreateIPCChannels() 
     Dim inhc As INativeHandleContract = tabClient.ReturnBrowserObject 
     fe = FrameworkElementAdapters.ContractToViewAdapter(inhc) 
     Me.Grid1.Children.Add(fe) 

     'Catch ex As Exception 
     ' MsgBox(ex.ToString) 

     'End Try 
    End Sub 
Private Sub StartTabProcess() 
     Dim str As String = String.Format(CultureInfo.InvariantCulture, "/guid:{0} /id:{1}", New Object() {g, Process.GetCurrentProcess.Id}) 
     p = New Process 
     p.StartInfo.CreateNoWindow = True 
     p.StartInfo.UseShellExecute = False 
     p.StartInfo.Arguments = str 
     p.StartInfo.FileName = "BrowserTabHost.exe" 
     p.Start() 
    End Sub 
Private Sub CreateClientIPC() 
     Dim serverProv As New BinaryServerFormatterSinkProvider() 
     serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full 
     Dim clientProv As New BinaryClientFormatterSinkProvider() 

     Dim properties As System.Collections.IDictionary = New System.Collections.Hashtable() 
     properties("name") = "Client" 
     properties("portName") = g.ToString 
     properties("typeFilterLevel") = "Full" 
     properties("exclusiveAddressUse") = "False" 
     ' Create the channel. 
     Dim serverChannel As New IpcChannel(properties, clientProv, serverProv) 
     ChannelServices.RegisterChannel(serverChannel, False) 

     tabClient = DirectCast(Activator.GetObject(GetType(BrowserObject), "ipc://" & g.ToString & "/TabClient"), BrowserObject) 
    End Sub 

그리고 비슷한 질문이 여기에 질문을 받았다

<Serializable()> _ 
Public Class BrowserObject 
    Inherits MarshalByRefObject 
    Public ihc As INativeHandleContract 
    Public ad As Dispatcher 
    Public handle As IntPtr 
    Public Delegate Sub ManipulateWB() 
    Dim newWeb As WebBrowser 
    Public Delegate Function CreateAndReturnWebInstance() 
    Public Property Browser As Pajocomo.Windows.Forms.WebBrowserControl 
    Dim wfh As WindowsFormsHost 
    Public Sub New() 
     ad = Dispatcher.Current 
    End Sub 
    Public Function ReturnBrowserObject() As INativeHandleContract 
     Try 
      ad.DoWork(New CreateAndReturnWebInstance(Function() 
                 newWeb = New WebBrowser 
                 'wfh.Child = newWeb 
                 ihc = FrameworkElementAdapters.ViewToContractAdapter(newWeb) 
                 Return Nothing 
                End Function)) 

      Return ihc 
     Catch ex As Exception 
      MsgBox(ex.ToString) 
     End Try 
    End Function 
    Public Sub SetDockSettings() 
     'Browser.Dispatcher.BeginInvoke(New ManipulateWB(Sub() 
     '             Browser.NavigateToURL("http://neowin.net") 
     '            End Sub)) 
    End Sub 
    Private Function CreateWebInstance() 
     ' Browser = New Controls.WebBrowser 
     Return Browser 
    End Function 
End Class 

답변

0

좋아요. 비록 내가 원래 어떻게 그것에 대해 가고 있었는지. 키는 Win32 API SetParent입니다. 브라우저 컨트롤은 보조 프로세스에서 만들어지고 기본 프로세스의 창에서 다시 부모로 지정됩니다. 해결해야 할 유일한 문제는 크기 조정입니다.

+0

문제를 해결하기 위해 실제로 무엇을 했습니까? –

+0

위의 답변이 내가 더한 정보를 찾고 있다면 어떻게되었는지 알 수 있습니다 ... 나는 이미 말한 것을 더 이상 기억하지 않고 더 자세한 정보를 쉽게 얻을 수 없습니다. 원래의 질문은 리모팅과 관련이 있기 때문에 ... 내 대답이 원래 질문을 해결하지 못하는 것 같습니다. – rstat1

1

리모팅 객체는

.NET remoting exception: Permission denied: cannot call non-public or static methods remotely

또한이 질문에 봐.

http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/d8fd1cb7-6c6f-4ef4-b690-804c2147ce8b

는 코드가 일부 정적 또는 비 public 멤버를 사용합니까? 원격 프록시를 통해 액세스되는 정적 메서드 및 필드는 클라이언트 측에서 실제로 로컬로 실행됩니다. 따라서 유형이 인 경우에도 원격 고정으로 이동하도록 설정되어 있습니다. 액세스/호출이 원격으로 연결되지 않습니다. 서버 측의 정적 데이터에 액세스해야하는 경우 정적 액세스를 인스턴스 메서드/ 속성 또는 필드로 래핑해야합니다. 비공개 인 경우 을 공개해야합니다. 코드를 검사하여 이 도움이되는지 확인하십시오.

+0

앞에서 설명한 것처럼 내 코드에는 정적 또는 비공개 메서드가 없습니다. 사실 모든 코드는 공개로 설정됩니다. – rstat1

+0

코드를 보여줄 수 있습니까? – hgulyan

+0

"FrameworkElementAdapters"란 무엇입니까? 그게 수업 이름 이니? 그렇다면 제공 한 코드 줄이 정적 (VB에서 공유) 메서드를 호출하는 것처럼 보입니다. –

관련 문제