C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 自動生成ファイル内の一部クラスが読み込めない


(過去ログ 92 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■54799 / inTopicNo.1)  自動生成ファイル内の一部クラスが読み込めない
  
□投稿者/ nonstop820 (3回)-(2010/11/02(Tue) 16:46:31)

分類:[C#] 

2010/11/08(Mon) 10:29:27 編集(投稿者)
お世話になります。
本件、どなたか思い当たる方はいらっしゃらないでしょうか?
自分ではもうお手上げ状態でして…。
例えば「同じdll内で読み込めるクラスと読み込めないクラスがある」というような
ご経験をされたことがある等、ささいなことでも構いませんので、宜しくお願い致します。

-------------------------------------------------------------------------------------------

お世話になります。
金曜日にJNI関連で質問させて頂いた者で、同じプログラムでの別現象です。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=54715

C#のWebサービスを使用するプログラムなのですが、
開発環境でのデバッグ実行では問題なく動作するのに実行環境だとエラーになってしまい、
解決方法が見つからず困っています。
自分で作ったものでなく、いなくなった前任者の作ったものを引き継いでメンテしています。

バージョンは以下の通りです。

C# .Net Framework 4.0

Web参照で自動生成された Reference.sc を使用しているのですが。
その中のあるクラスが、メインのコードから直接呼び出すと何も起こらないのに、
同じネームスペース内の別クラスで定義されているメソッド内部で使用された場合にエラーになってしまいます。
具体的には以下のような感じです。


Reference.cs
----------------------------------------------------------------------

namespace ExchangeSubscriber.EWSReference {
    using System;
    using System.Web.Services;
    using System.Diagnostics;
    using System.Web.Services.Protocols;
    using System.ComponentModel;
    using System.Xml.Serialization;
    
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="ExchangeServiceBinding", Namespace="http://schemas.microsoft.com/exchange/services/2006/messages")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AttendeeConflictData))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseResponseMessageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseSubscriptionRequestType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseGroupByType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RecurrenceRangeBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RecurrencePatternBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AttachmentType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ChangeDescriptionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BasePagingType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseFolderType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseItemIdType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseEmailAddressType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseFolderIdType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseRequestType))]
    public partial class ExchangeServiceBinding : System.Web.Services.Protocols.SoapHttpClientProtocol {
        
        private ExchangeImpersonationType exchangeImpersonationField;
        
        private SerializedSecurityContextType serializedSecurityContextField; ← ← ← ← ← ← ← 問題のクラス

    ・・・・・・・・・・・・・・・・・・・(中略)・・・・・・・・・・・・・・・・・・・・・

	// 呼び出すとエラーが発生するメソッド

        [System.Web.Services.Protocols.SoapHeaderAttribute("SerializedSecurityContext")]
        [System.Web.Services.Protocols.SoapHeaderAttribute("MailboxCulture")]
        [System.Web.Services.Protocols.SoapHeaderAttribute("ServerVersionInfoValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.Out)]
        [System.Web.Services.Protocols.SoapHeaderAttribute("ExchangeImpersonation")]
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://schemas.microsoft.com/exchange/services/2006/messages/Subscribe", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
        [return: System.Xml.Serialization.XmlElementAttribute("SubscribeResponse", Namespace="http://schemas.microsoft.com/exchange/services/2006/messages")]
        public SubscribeResponseType Subscribe(
            [System.Xml.Serialization.XmlElementAttribute("Subscribe", Namespace="http://schemas.microsoft.com/exchange/services/2006/messages")] SubscribeType Subscribe1) {
            
            object[] results = this.Invoke("Subscribe", new object[] {Subscribe1});
            return ((SubscribeResponseType)(results[0]));
        }

    ・・・・・・・・・・・・・・・・・・・(以下略)・・・・・・・・・・・・・・・・・・・・・
  }

    ・・・・・・・・・・・・・・・・・・・(中略)・・・・・・・・・・・・・・・・・・・・・
    // 問題のクラス
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/exchange/services/2006/types")]
    [System.Xml.Serialization.XmlRootAttribute("SerializedSecurityContext", Namespace="http://schemas.microsoft.com/exchange/services/2006/types", IsNullable=false)]
    public partial class SerializedSecurityContextType : System.Web.Services.Protocols.SoapHeader {
        
        private string userSidField;
        
        private SidAndAttributesType[] groupSidsField;
        
        private SidAndAttributesType[] restrictedGroupSidsField;
        
        private string primarySmtpAddressField;
        
        /// <remarks/>
        public string UserSid {
            get {
                return this.userSidField;
            }
            set {
                this.userSidField = value;
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("GroupIdentifier", IsNullable=false)]
        public SidAndAttributesType[] GroupSids {
            get {
                return this.groupSidsField;
            }
            set {
                this.groupSidsField = value;
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("RestrictedGroupIdentifier", IsNullable=false)]
        public SidAndAttributesType[] RestrictedGroupSids {
            get {
                return this.restrictedGroupSidsField;
            }
            set {
                this.restrictedGroupSidsField = value;
            }
        }
        
        /// <remarks/>
        public string PrimarySmtpAddress {
            get {
                return this.primarySmtpAddressField;
            }
            set {
                this.primarySmtpAddressField = value;
            }
        }
    }
 
    ・・・・・・・・・・・・・・・・・・・(以下略)・・・・・・・・・・・・・・・・・・・・・

----------------------------------------------------------------------



引用返信 編集キー/
■54800 / inTopicNo.2)  Re[1]: 自動生成ファイル内の一部クラスが読み込めない
□投稿者/ nonstop820 (4回)-(2010/11/02(Tue) 16:48:14)
※全文投稿しようとするとエラーになってしまうので分割しました。


メインクラス(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# は初心者なもので、原因に何か思い当たる方がいらっしゃいましたら、どうかご教授お願いします。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -