アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。

asp.netの動作環境検証テストをしているのですが、クラスの動作で躓いております。

--------------------------------------------------
≪テスト内容≫

visual web developer 2008にて作成したサイトのファイルをサーバ上へコピーしてテストしています。

App_Codeフォルダ内へclass1.vbファイル作成
フォームの'Dim test As New Class1'を記述
IISの仮想ディレクトリへサイトファイルを丸ごとコピー
ブラウザで実行

--------------------------------------------------
≪サーバ環境:≫

OS:windows server 2008

1. 以下をインストール
asp.net
.NET framework 2.0

2. IISマネージャのwebサービス拡張の画面で

Active server pages
ASP.NET 1.14…
ASP.NET 2.0…

を許可する

3. サイトのプロパティにてバージョンをASP.net2.0へ変更

--------------------------------------------------
≪詳細≫

ローカル(開発環境)環境ではvisual web developerでのデバッグはエラーが出ないのですが、サーバへコピーすると以下のエラーが出てしまいます。
また、開発環境側では、他の開発環境(vb6等)が入っているため、'msgbox'が動作するなどサーバ環境へファイル移行した時と動作が違っている部分はあります。

●ブラウザに表示されるエラー内容

説明: この要求を送信するために必要なリソースをコンパイル中に、エラーが発生しました。以下のエラーの詳細を確認して、ソース コードを修正してください。

コンパイル エラー メッセージ: BC30002: 型 'Class1' が定義されていません。

ソース エラー:

行 22: Dim test As New Class1

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

今いち基本的なことを理解していないため、サイトの側の記述に問題があるのか、サーバ環境に問題があるのかの判断もつかない状況です。

見当違いな質問をしている可能性があるのですが、ご存知の方いらっしゃいましたらご教授頂けますようよろしくお願いいたします。

A 回答 (5件)

>webconfig


>default.aspx
>default.vb
>□App_Code
>class1.vb

BinディレクトリもUPしてください。
Binディレクトリがないのであれば、サーバー側で空のBinディレクトリを作ってください。Binディレクトリがないためにエラーになることは多々あります。

>これはIISマネージャにて設定するものでしょうか?
>明示的に作業をして権限を与えた、というようなことはしておりません。

IISマネージャーではなく、ファイル操作するエクスプローラー(Windowsキー + Eキーで起動)でASPNETユーザに権限を与えて下さい。ないとエラーになります。

>これは問題の仮想ディレクトリに設定してあるフォルダの上位フォルダを仮想ディレクトリに設定してある場合は、ということでよろしいでしょうか?

既定のWebサイトも問題の仮想ディレクトリも両方必要です。
また、仮想ディレクトリ内にまた子の仮想ディレクトリを作成した場合も子に対しても設定が必要です。

そんなところでしょうか。IISは再起動をしているということですが、何か設定した度に再起動して確認してみてください。

この回答への補足

度々ご回答ありがとうございます。

ご教授いただいた作業を一通り行ったのですが駄目でした…。
ただ、サーバ側の問題だというのは大体分かりましたので再度初期設定自体を見直して見ます。

あと、もし可能でしたらあと数点質問させてください。

> IISマネージャーではなく、ファイル操作するエクスプローラー(Windowsキー + Eキーで起動)でASPNETユーザに権限を与えて下さい。ないとエラーになります。

windows上で言いますと、everyoneにフルアクセス権限を与えている状態で問題ないでしょうか?ASPNETユーザというものを作る必要があるのでしょうか?

関係ないかと思い省いていたのですが、visual web developer 2008でデバッグ時に自動でできるwebconfigをそのままコピーすると以下のエラーが発生するためその部分をコメントアウトしているのですが、問題ないでしょうか?
-----------------------------------
構成にエラーがあります。
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。

パーサー エラー メッセージ: アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。

ソース エラー:

行 47: <authentication mode="Windows"/>
-----------------------------------

以上よろしくお願いいたします。

補足日時:2008/11/10 11:44
    • good
    • 0
この回答へのお礼

お世話になっております。

さて、解決しましたのでご報告させていただきます。
結論といたしましては、対象の仮想ディレクトリがルートのひとつ下のディレクトリで行っていた事が原因でした。

仮想ディレクトリ直下へファイルを移動したところ、解決しました。

また、web.configで出てしまうエラーも、ビルドのプロパティを.net framewok2.0に設定することで解決しました。

基本的な部分でのミスでお手数おかけして申し訳ございませんでした。
色々とご教授いただいたおかげで、問題解決に繋がりました。

本当にありがとうございました。

お礼日時:2008/11/10 17:58

ダメでした。

これ以上はもういいです。ありがとうございました。
で結論づけちゃうのもちょっと・・・
後で同じ問題に悩んだ人がこのスレッドを見た時に
曖昧になってしまいますので、ダメだったら、ダメだったなりに
模索すべきです。

さて、気になったのは、Binディレクトリのファイルも
サーバーにすべてUPしてますよね?
きっと他のサーバーには存在し、問題のサーバーだけに
存在しないファイルやDLLがあるような気がします。
(ここでいうDLLはBinディレクトリという意味ではなく、
GAC(グローバルアセンブリキャッシュ)に登録されていない
DLLがあるかもしれないという意味です)

また、問題のサーバーや、仮想ディレクトリやApp_Codeディレクトリ
に対し、ASPNETユーザに権限は付与されていますか?
なければ権限付与してみてください。

また、IISの「ASP.NET バージョン」ですが、仮想ディレクトリだけではなく、仮想ディレクトリより上位にあるフォルダや仮想ディレクトリ、Webサーバーに対しても同様に「ASP.NET バージョン」を「2.050727」に設定しましたか?

いずれにしても今まで教示した中で絶対に解決できるはずです。
私自身、過去に何度もこの事象にはまってきて実際に
体験してますので、教示した内容は絶対に間違いないです。
後は、ちょっとしたやり方や対象箇所が間違ってたとか
そんな類だと思いますので、ご確認ください。

一応、今まで教示した中で設定は設定し終えた後、IISの再起動とかされていますよね?一応、何かを設定したら念のためIIS Adminサービスの再起動はした上で確認してください。
    • good
    • 0
この回答へのお礼

本当に度々申し訳ございません。また、ありがとうございます。
月曜までサーバ環境が触れないため、お礼と補足のみになりますがご容赦ください。

> BinディレクトリのファイルもサーバーにすべてUPしてますよね?

サーバ側へ配置しているのは

webconfig
default.aspx
default.vb
□App_Code
class1.vb

のみとなります。他に必要なものがあるということでしょうか?

> 問題のサーバーや、仮想ディレクトリやApp_Codeディレクトリ
に対し、ASPNETユーザに権限は付与されていますか?

これはIISマネージャにて設定するものでしょうか?
明示的に作業をして権限を与えた、というようなことはしておりません。

> IISの「ASP.NET バージョン」ですが、仮想ディレクトリだけではなく、仮想ディレクトリより上位にあるフォルダや仮想ディレクトリ、

これは問題の仮想ディレクトリに設定してあるフォルダの上位フォルダを仮想ディレクトリに設定してある場合は、ということでよろしいでしょうか?
それとも仮想ディレクトリ内に仮想ディレクトリが設定できるのでしょうか?
いずれにしても問題ないと思います。

> Webサーバーに対しても同様に「ASP.NET バージョン」を「2.050727」に設定しましたか?

既定のwebサイトに仮想ディレクトリを設定している場合は、「既定のwebサイト」を選択→プロパティ、ということで問題ないでしょうか?
昨日確認した時にはなっていたと思いますが、再度確認いたします。

> 後は、ちょっとしたやり方や対象箇所が間違ってたとか
そんな類だと思いますので、ご確認ください。

そうですね。再度一通り確認しながら作業してみます。

>今まで教示した中で設定は設定し終えた後、IISの再起動とかされていますよね?

IISの再起動はしています。

以上よろしくお願いいたします。

お礼日時:2008/11/08 08:52

ソースコードの公開ありがとうございました。


ソースを見てわかったこの現象の解決策ですが
以下の3つのうちどちらかを対応すれば解決すると思います。
(ほぼ断言します)

・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない
 稼動サーバーのIIS(Internet Information Server)の
 設定で問題のWebアプリケーションを動かすために、
 仮想ディレクトリを作っているかと思いますが、その仮想ディレクトリ
 の[プロパティ]で[ASP.NET]というタブがあるので、
 「ASP.NET バージョン」を「2.050727」に変更してください。
 (恐らく、「1.1.4322」になっているような気がします)

・上記でダメだった場合、
 問題サーバーの[スタート]→「ファイル名を指定して実行」を起動し、
 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
 を実行してみてください。
 (恐らくASP.NETの構成がおかしくなっているので、
 上記をやることで、ASP.NETの構成を正しくリセットすることができます)

・もし上記2つでもダメだった場合、
 App_Codeに書いた、Class1.vb のソースファイルにNewメソッドを
 追加してください。

  Imports Microsoft.VisualBasic
  Public Class Class1
    Public Sub New()

    End Sub
  End Class

以上、宜しくお願いします。
    • good
    • 0
この回答へのお礼

度々ご回答ありがとうございます。

早速試させていただきました。

・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない
→問題ありませんでした。

・C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
→実行しました。インストールされましたが、実行したところ駄目でした。

・App_Codeに書いた、Class1.vb のソースファイルにNewメソッドを追加してください
→追加しましたが、実行したところ駄目でした。

解決できませんでしたが、本当にありがとうございました。
ちょっと何か根本的な部分が間違っているのかもしれません。

お礼日時:2008/11/07 18:34

1つ忘れてました。


Class1は外部DLLなのか、それともApp_Codeに定義しているクラスですか?

また、aspxファイルやascxファイルから、Class1を外部DLLを参照させているのであれば、DLLを参照設定した上で、Namespaceプロパティを設定しないとたぶん動かないかもしれません。

<%@ Register TagPrefix="test" Namespace="Class1が定義されているフル名前空間(Ex:SampleProjet.Test1)" Assembly="Class1のDLL名" %>

いずれにしても、問題のソースコードがどうなっているのか公開して頂かないと、回答もまばらになってしまいます。
正確な回答を欲しいのであれば、ソースコードを補足情報としてUPしてください。
宜しくお願いします。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

動作のテストをしているだけのため、ソースというのもおこがましいのですが、詳細を記載させていただきます。

≪作業内容≫
1.visual web developer 2008にて新規サイトを作成
2.default.aspxファイルの追加、App_Codeというフォルダを作成し、その中にclass1.vbファイルを追加
3.default.aspxにボタンを追加+ボタンのクリックイベント内に

'dim test as New class1'

という記述を追加

---------------------------------------------------
●default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
</html>

●default.vb
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim test As New Class1

End Sub
End Class

●class1.vb
  Imports Microsoft.VisualBasic
  Public Class Class1

  End Class
------------------------
以上です。

> そもそもClass1という型をApp_Codeの配下に定義していない?
これは単純に追加するという意味ではないのでしょうか?

> Class1へのパスが通っていない
(Dim test As New [Projectで設定している名前空間名].Class1
 にするか、もしくは、Class1を参照するためのImportsが定義されていない)

なるほど。この辺を全く理解していないようです。

>Class1は外部DLLなのか、それともApp_Codeに定義しているクラスですか?

App_Codeに定義しているクラスになると思うのですが、この辺りに関しても回答できるほどの知識がない状態です。
申し訳ございません。

ちょっと調べてみます。

お礼日時:2008/11/07 15:56

・単純に、Class1を定義しているソースファイルをリリースし忘れている


・そもそもClass1という型をApp_Codeの配下に定義していない?
・Class1へのパスが通っていない
(Dim test As New [Projectで設定している名前空間名].Class1
 にするか、もしくは、Class1を参照するためのImportsが定義されていない)
・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない

上記のいずれかしかありませんので、見直してみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!