|
※全文投稿しようとするとエラーになってしまうので分割しました。
メインクラス(PushNotificationSubscriber.cs)
----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
using ExchangeSubscriber.EWSReference;
using System.Net;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Xml.Serialization;
using Npgsql;
class PushNotificationSubscriber
{
public void SubscribeForPushNotifications(string server, string domain, string watermark, string impUser, string endpoint, string pgsqlurl)
{
System.Console.WriteLine("SubscribeForPushNotifications is called !");
try
{
SerializedSecurityContextType sh = new SerializedSecurityContextType(); ←←←←←←←←←←← 直接使用してもエラーにならない
System.Console.WriteLine("SerializedSecurityContextType is new !");
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
// Replace this line with code to validate server certificate.
return true;
};
System.Console.WriteLine("Create the bindings and set the credentials.");
// Create the bindings and set the credentials.
ExchangeServiceBinding esb = new ExchangeServiceBinding();
・・・・・・・・・・・・・・・・・・・(中略)・・・・・・・・・・・・・・・・・・・・・
System.Console.WriteLine("Send the subscribe request and get the response.");
// Send the subscribe request and get the response.
SubscribeResponseType subscribeResponse = esb.Subscribe(subscribeRequest); ←←←←←←←←←←← ここでエラー発生
System.Console.WriteLine("Check the result.");
// Check the result.
if (subscribeResponse.ResponseMessages.Items.Length > 0 &&
subscribeResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
{
・・・・・・・・・・・・・・・・・・・(中略)・・・・・・・・・・・・・・・・・・・・・
}
}
catch (Exception e)
{
System.Console.WriteLine(e.ToString());
}
}
----------------------------------------------------------------------
エラーログ
----------------------------------------------------------------------
SubscribeForPushNotifications is called !
SerializedSecurityContextType is new !
Create the bindings and set the credentials.
Send the subscribe request and get the response.
System.InvalidOperationException: XML ドキュメントを生成中にエラーが発生しました。 ---> System.TypeLoadException: アセンブリ 'PushNotificationSubscriber, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' から型 'ExchangeSubscriber.EWSReference.SerializedSecurityContextType' を読み込めませんでした。
場所 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterExchangeServiceBinding.Write344_SubscribeInHeaders(Object[] p)
場所 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer50.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
場所 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWrite r, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- 内部例外スタック トレースの終わり ---
場所 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
場所 System.Web.Services.Protocols.SoapHeaderHandling.WriteHeaders(XmlWriter writer, XmlSerializer serializer, SoapHeaderCollection headers, SoapHeaderMapping[] mappings, SoapHeaderDirection direction, Boolean isEncoded, String defaultNS, Boolean serviceDefaultIsEncoded, String envelopeNS)
場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Serialize(SoapClientMessage message)
場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
場所 ExchangeSubscriber.EWSReference.ExchangeServiceBinding.Subscribe(SubscribeType Subscribe1)
場所 PushNotificationSubscriber.SubscribeForPushNotifications(String server, String domain, String watermark, String impUser, String endpoint, String pgsqlurl)
----------------------------------------------------------------------
実行環境は、PushNotificationSubscriber.cs と Reference.cs を一緒にコンパイルして netmodule を作成し、
それをC++経由でJavaから呼び出しています。
netmodule 作成コマンド:
************************************************************************************************
csc.exe /lib:C:\Npgsql2.0.7-bin-ms.net\Npgsql2.0.7-bin-ms.net\bin\
/r:NPgsql.dll /t:module PushNotificationSubscriber.cs "Web References\EWSReference\Reference.cs"
************************************************************************************************
開発環境フォルダ構成:
************************************************************************************************
プロジェクトルート
L PushNotificationSubscriber.cs
L Web References
L EWSReference
L Reference.cs
L ....
L ....
************************************************************************************************
実行環境フォルダ構成:
************************************************************************************************
Javaクラスパスに通してあるディレクトリ
L PushNotificationSubscriber.dll ・・・ C++ のdll
L PushNotificationSubscriber.netmodule ・・・ 上記コマンドで作成したnetmodule(C++から呼び出す)
L Web References.EWSReference.Reference.cs.dll ・・・ 開発環境で自動生成されるdll(あってもなくても変わらない)
************************************************************************************************
同じコード内で同じものを読み込んでいるはずなのですが、
一方では読み込めて他方では読み込めない、というのがどうも分かりません・・・。
C# は初心者なもので、原因に何か思い当たる方がいらっしゃいましたら、どうかご教授お願いします。
|