2012-01-18 28 views
51

Tôi đã tạo phân vùng miền COM + rồi ánh xạ nó tới máy chủ Windows 2008 và nhập ứng dụng COM + vào đó.COM + kích hoạt đối tượng trong một phân vùng khác

tôi đã cố gắng sử dụng mã C# sau đây để kích hoạt một đối tượng từ đó phân vùng cụ thể trên máy chủ từ xa:

//partition guid 
Guid guidMyPartition = new Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70"); 
//parition moniker 
string uri= "partition:{" + guidMyPartition + "}/new:MyObject"; 
Type t = Type.GetTypeFromProgID("MyObject", "MyServer"); 
MyObject obj = (MyObject)Activator.GetObject(t, uri); 

Nhưng tôi nhận được ngoại lệ này:

Không thể tạo bồn rửa kênh để kết nối với Phân vùng URL: {41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/mới: MyObject '. Kênh thích hợp có thể chưa được đăng ký.

Có ai biết cách kích hoạt như vậy có thể được thực hiện không?

+1

Bạn đang cố gắng để kích hoạt một bản địa (theo nghĩa không NET) COM + thành phần hoặc chúng ta đang nói về một ServicedComponent (viết cho CLR ngay cả khi xuất bản sử dụng cơ sở hạ tầng COM +)? – gsscoder

+0

Cho đến khi bạn cung cấp chi tiết này. Bạn có thể tham khảo câu hỏi khác này: http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-com-class-interface-generically và cũng để Marshal.BindToMoniker MSDN doc (http: // msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.bindtomoniker.aspx). – gsscoder

+1

CLR ServicedComponent – Solid

Trả lời

1
  1. Đảm bảo Com của bạn ở chế độ công khai và hiển thị. Để thực hiện việc này, hãy thêm các thẻ này vào lớp học của bạn:

    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70")] 
    [ProgId("..........")] 
    [ComVisible(true)] 
    public class MyCom 
    { 
    
  2. Đảm bảo COM của bạn đã được đăng ký. Bạn có thể làm điều này bằng cách sử dụng dòng lệnh:

    C:\WINDOWS\Microsoft.Net\Framework\v4.0.30319\regasm "C:\.......\xxx.dll" 
    
Các vấn đề liên quan