元スレMicrosoft Silverlight その4
silverlight覧 / PC版 /みんなの評価 : ○
501 = :
>>498,496
印刷で思い出したのでURL貼るけど、下記のサイトでは
ちょっとややこしいが。
WritableBitmap -> PngEncoder -> HTML Hidden格納 -> ASP.NET Print Controller ?で印刷を実現してる。
画像の貼り付けになっちゃうけど案外これでいいかもと思った。
http://www.andybeaulieu.com/silverlight/3.0/printablesilverlight/printablesilverlight.aspx
502 = :
Base64を忘れていた。
Client WritableBitmap -> PngEncode -> Base64Encode -> HTML Hidden格納
Server HTML Hidden取り出し -> Base64Decode -> PngDecode -> Print Controlに画像貼り付けだ。
503 = :
まぁ、印刷サポートは入れるでしょうねぇ。
ユーザー層を考えると、LOBアプリをWeb化するのに使えますと
言うのが一番訴求するだろうし。
504 = :
どこにこの怒りをぶつけていいのか判らないので、検索で見つけたこのスレに投下。
Silverlightインストール不能。
エラーメッセージID 1622
インストールログファイルに書き込むことができませんでした。Tempフォルダーが存在し、
このフォルダーに書き込むことができることを確認してください。
なんのこっちゃい? 試行錯誤するも解決できず、ついにサポートセンタにTEL。サポートでも
わけわからず、こちらと一緒になって試行錯誤すること、およそ2時間。ようやく原因判明。
Tempフォルダをデフォルトから移動させていると(SSD使ってるとか、高速なドライブにTemp
をおいて高速化しているとか)、インストールできない!!
インストーラにバグがあるようだが、「無論、これは仕様です」
Silverlighとは無縁の人生を送れそうだ。さらば Yahoo, Gyao
ばっきゃろー!!
505 = :
>>500
ほんとだExpression Mediaが入ってないですね。
まぁ、Mediaって微妙な製品ですよね。
自分的には使い勝手がいまいちな感じと。これ必要なの?みたいな印象だけど
506 = :
・Tempフォルダ関係のエラーが出た
・Tempフォルダを移動している
これだけ情報が揃ってたのに、なぜ真っ先にTempフォルダを元に戻して試さなかった…
508 = :
>>506
もちろんそう考えて、自分で試行錯誤した時にTempをデフォルトに戻し再起動ログインしてみたが、
だめだったのさ。つか普通そんなとこまで考えないだろ? TempがどこにあるかなんてOS任せで、
他のプログラムが関与するなんてありえないだろ?
新規のユーザアカウントを作ったらインストールでけたということで、どうやら最初からTempは
デフォルト固定じゃないとだめみたい。一体どんなプログラムなんだ?
510 = :
>>508
> Tempをデフォルトに戻し再起動ログインしてみたが、だめだったのさ。
> 新規のユーザアカウントを作ったらインストールでけた
本当にTempフォルダの移動が原因なのか?
とりあえず、情報が曖昧すぎて試すのも面倒だから、
> Tempフォルダをデフォルトから移動
なんて書かずに、
ユーザーの環境変数TEMPをXXXからYYYに変更
システムの環境変数TMPをXXXからYYYに変更
みたいな感じで正確に書いてくれ。
511 = :
うちはテンポラリフォルダを変えて使ってるけど、トラブルは起きてないよ。
環境はVistaと2000。(2000はランタイムのみ)
もうちょっと切り分けて調べた方がいいと思う。
512 = :
俺もRAMディスクにTEMPフォルダ置いてるが特に問題なかったな
514 = :
意外と関心があるようなので
インスツールできたTempのアドレス
D:\Documents and Settings\1\Local Settings\Temp\
(因みにSilverlight関係と思われるファイルがいくつか作成されている)
失敗したTempのアドレス
E:\Temp\
D:\Documents and Settings\秘密\Local Settings\Temp\
(環境変数を元に戻した。Silverlight0.logだけが作成されていた)
もう一度アカウントをつくってE:\Temp\にしたらやっぱりだめだった。
516 = :
D:\Documents and Settings\1\Local Settings\Temp\
D:\Documents and Settings\秘密\Local Settings\Temp\
この違いは単純に全角を使ってるか否かだけかな?
"秘密"の部分が日本語だったとして。
E:\Temp\
ここはレスから推察するにSSDになるのかな?
"E:\Temp\"だからダメなのか、想定された記憶媒体でないから弾いたのか、気になるところ。
つか>>508はSilverlightでひどい目に会ったのに意外と協力的だよね。
個人的な見解だけど、このスレにはFlash信者が時々アンチとして湧くので
ネガティブなレスに敏感なってるように感じる。多少トゲのあるレスにはめげず
書き込んでくれると助かる。
517 = :
>>516
協力的とか好意的とかそうゆー心情的なものではなくて、技術的な問題には真摯にというポリシー
(これも信条か)なので、まともな質問には答えたくなる。
もちろん「秘密」というのは、「そんなの公開できるか」という意味合いであって単なるボカシだ。
管理人はPIYOPIYOエプロンという固定概念の持主だと知れたら恥ずかしいだろ?
あとDドライブがSSDであって、寿命の点から煩雑に書き換えしたくないという理由でEドライブ
にTempを置いている。(スピ-ド重視ではなく寿命重視ということで)。
しかし>>512のような事例があるとすると、E:\Temp\にナニかが居るからだというセンも考えられるが
518 = :
もしこのままSilverlightが順調にシェアを伸ばしたら
Flash使いとの醜い争いが本格化するんだろうな。
そういうのはお腹いっぱい
519 = :
口汚く罵るしか能が無い奴は、どちらの案件でも開発なんかやったことない
外野の素人だから放置しておけばいいよ。
520 = :
話は超・横にそれるが将来的にこの手のはRIAは
処理負荷の高いアプリ→Native Client
そうでもないアプリ→Silverlight
携帯端末、家電UI→Flash
になるんじゃないかと思う。プラットフォームを切り捨ててる分
Native Client>Silverlight>Flash
という速度の壁は越えられないと思う。逆にFlashはどこかでこの二社と
正面からぶつかるのをやめ、最も多くのハードで動く所を長所とした
差別化をしていくんじゃないかな。
521 = :
Silverlight3でOutOfBrowserできるようになって、
業務で十分使える状況になってきたけど、みなさん
帳票印刷はどーなさるおつもりですか?
ブラウザ上で動いていればWeb帳票のソリューション
で解決しそうなもんだけどOutOfBrowserからだと
厳しそうな気がすんですが。。。
OutOfBrowser状態からWebページ開いたりできる?
522 = :
印刷はいまのところ、PDFとかをサーバ側で生成するとかしか無いんでないかな。
Out Of Browserってオフライン時にも実行できるから、
分離ストレージにデータ蓄積してネットワークが接続できたら、
サーバと通信するみたいな使い方を想定していると思う。
そうすると分離ストレージにデータを格納できるSQLServer小型版のSilverlight版が欲しいだよな。
523 = :
以下の現象で困っています。分かる方がいらっしゃれば教えてください。
VS2008で Silverlight3.0 Webアプリを作成しているのですが、WebClientでファイルを取得するたびに
Tempフォルダに XCP???.tmpという 20MBのファイルが次々追加されてしまいます。
数十秒に一度の頻度で取得するので、大容量になってしまい無視できません。
この XCP???.tmpファイルを作成しないようにする方法、またはすぐに消す方法や情報等がありましたら
教えてください。
これまでに試したこと。
・Webサーバ(geocities)に、作成した zapファイルを配置して実行すると tmpが作成される。(Debug、Release共に)
(VSからのテスト実行では tmpは作成されない。(Debug、Release共に))
・WebClientの AllowReadStreamBufferingは true、false共に効果なし。
・ボタンClickの処理で毎回 _webClient = new WebClient();を行っても tmpは削除されない。
・_webClientをクラス変数ではなく btnStart_Click()内で作成しても効果なし。
524 = :
以下はビハインドコードです。XAMLにはボタンのみあり、btnStart_Clickが呼ばれます。
ボタンを押すごとに tmpが次々増えていきます。
(ブラウザを終了すると自動で削除されます)
namespace SL_Test1 {
public partial class MainPage : UserControl {
WebClient _webClient = new WebClient();
public MainPage() {
InitializeComponent();
_webClient.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(mWebClient_DownloadStringCompleted); // DL完了イベント登録
_webClient.AllowReadStreamBuffering = false; // インターネット リソースから読み取ったデータをバッファリングするかどうか
}
private void mWebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) {
if (e.Error != null) return;
if (e.Cancelled) return;
MessageBox.Show(e.Result);
}
private void btnStart_Click(object sender, RoutedEventArgs e) {
_webClient.DownloadStringAsync(new Uri(Application.Current.Host.Source, "hoge.txt"), "hoge.txt");
}
}
}
525 = :
データをロードするSilverlightを表示した状態で
TMPファイル内を"XCP*.tmp"で検索かけてみたけど出てこなかった。
そのtmpファイル内の内容はなんでしょう?実はエラーログ的な何かとか。
526 = :
>525 確認ありがとうございます。
> TMPファイル内を"XCP*.tmp"で検索かけてみたけど出てこなかった。
*の部分は2桁以上の16進のようです。
実行するたびに数値が増えていきますが、必ずしも1ずつ増えるわけでもありません。
私は環境変数 TEMPと TMPを C:\Temp に変更しているのですが、このフォルダを見てると、
上で書いているボタンを押すたびに、ファイルが1つずつ増えていってしまいます。
> そのtmpファイル内の内容はなんでしょう?実はエラーログ的な何かとか。
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
と出て、メモ帳とかバイナリエディタで確認することができません。作成されたファイル全て。
ログの線だと、どの設定でそうなるのかよくわかりません。
(プロパティはアセンブリ情報くらいしか触ってないはず…)
Debugビルドだけでなく Releaseビルドでも同じ現象でもありますし。
通信時なので、非同期通信のデータを溜めておくバッファではないかとも想像しています。
(データ量が多すぎたときに RAMを圧迫しないようにこのファイルに溜めていく?)
そうだとしても、設定で通信処理後自動削除、もしくはメソッド等で削除ができないと
溜まるばかりですし。(それを一部試したのが AllowReadStreamBuffering)
以下はM$のFileMonで見たログです。
Process Request Path Result Other
iexplore.exe CREATE C:\Temp\XCP23.tmp SUCCESS Options: Create Access: Read
iexplore.exe CLOSE C:\Temp\XCP23.tmp SUCCESS
iexplore.exe CREATE C:\Temp\XCP23.tmp SUCCESS Options: OverwriteIf Access: 0013019F
iexplore.exe DIRECTORY C:\Temp\ SUCCESS FileBothDirectoryInformation: XCP23.tmp
iexplore.exe QUERY INFORMATION C:\Temp\XCP23.tmp SUCCESS Length: 0
iexplore.exe SET INFORMATION C:\Temp\XCP23.tmp SUCCESS Length: 20971520
iexplore.exe READ C:\Temp\XCP23.tmp SUCCESS Offset: 0 Length: 32768
↑ここまでで止まります。
IEを閉じたときには↓
iexplore.exe CLOSE C:\Temp\XCP23.tmp SUCCESS
527 = :
>>526
> > そのtmpファイル内の内容はなんでしょう?実はエラーログ的な何かとか。
> 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
> と出て、メモ帳とかバイナリエディタで確認することができません。作成されたファイル全て。
開けなくてもエクスプローラでファイルのコピーはできることはあるから、
とりあえずコピーして開くとどうなる。
528 = :
>527
作成された直後のも、その前のも以下のメッセージでコピーできません。
「XCP30 をコピーできません。ほかの人またはプログラムによって使用されています。」
消されたファイルは、ゴミ箱にも残ってませんし、Nortonゴミ箱の保護ファイルにも残されていません。
何とか中が見えればいいのですが…。
529 = :
Debugで作成したものをネット上に置き、DBCon等
デバッグコンソールを表示するソフトを起動してSilverlightを
実行すると、ブラウザ側の警告込みで情報が得られるかもしれません。
後、自分が作成したもの以外のアプリでもされるのでしょうか?
530 = :
×後、自分が作成したもの以外のアプリでもされるのでしょうか?
○後、自分が作成したもの以外のアプリでも生成されるのでしょうか?
531 = :
>529
> Debugで作成したものをネット上に置き、DBCon等…(略)
DBConから分かりませんので、それも含めて調べてみます。
> 後、自分が作成したもの以外のアプリでもされるのでしょうか?
@ITの「Webサービスを利用するSilverlightアプリを作ろう」
http://www.atmarkit.co.jp/fdotnet/vblab/silverlight2develop_02/silverlight2develop_02_01.html
にあるガソリン情報取得アプリで、住所を入れて価格取得ボタンを押すと、
しばらく間をおいて作成されます。(同じく XCP*.tmp。16進値は前の値から連続しています)
最初はn個一気に作成されます。住所を変えないで再度ボタンを押すと、1つずつ増えていきます。
住所を変更してボタンを押すと、またn個一気に増えます。
同様の現象は出ますでしょうか?
532 = :
環境を補足しておきます。
OS:WindowsXP SP3
Silverlight:VS2008 SP1用 Silverlight 3 Toolsをインスト
以下はVSのバージョン情報からの抜粋
VS2008:9.0.30729.1 SP
.NET Framework:3.5 SP1
Silverlight Projects 2008:9.0.30730.126
記述言語はC#。
533 = :
挙動が違いますが、XCP*.tmpファイルは確認できました。
こちらの環境で最大で1つ以上作成されませんでした。
>ttp://www.atmarkit.co.jp/fdotnet/vblab/silverlight2develop_02/silverlight2develop_02_01.html
上記アプリで価格取得ボタンを押した時に作成されますが、しばらくすると消えます。
それ以降、再度ボタンを押しても エクスプローラー上には現れませんでした。(IE8,FF3)
挙動から推察するに、ダウンロードリソースの一時ファイルかと思います。
どこまでも仮説ですが、ハードやウイルスソフトなどの環境要因でダウンロードの終了が
Silverlightに通知されず、次のダウンロードリクエストで更に一時ファイルが‥ということが
繰り返されているのではないでしょうか?
起動中のソフトを1つ1つ終了させていくと、どこかで問題が解決するかもしれません。
534 = :
すいません、質問してもいいですか?
シルバーライトのテキストボックスにクリップボードのテキストをVBでPasteできないんですか?
535 = :
自己解決、出来ました。
536 = :
> 533
検証ありがとうございます。
tmpファイルが1つしか作成されないということは、IE7と8の差、もしくはIEのオプション設定が
怪しいのかも。
(スクリプトデバッグのON/OFFでは変化ありませんでした。スクリプトエラー表示をONにしても
何もエラー表示なしです。)
IE8必須にするにはまだ時期尚早と考えてますので、IE7でもう少し粘って調べてみます。
> どこまでも仮説ですが、ハードやウイルスソフトなどの・・・(略)
ダウンロードは mWebClient_DownloadStringCompletedが発生しているので終了通知は受け取っていると
思います。
とすると、随時の削除通知がOSに伝わってないとしたら・・・。
ブラウザ終了時に tmpが消えるのも不自然ということか・・・。
ウイルスソフトだとちょっと困りますね。
(NTT提供の TREND MICRO セキュリティ対策ツールVer16を使用。アップデート済)
> 起動中のソフトを1つ1つ終了させていくと、どこかで問題が解決するかもしれません。
OS起動時の新鮮な時に試してみます。
537 = :
> 529
DBCon試してみました。
(これすごく役に立ちます。今まで別途テキストボックス作って出してました。ありがとうございます。)
特にエラー等は検知できませんでした。
mWebClient_DownloadStringCompleted() 処理で例外も発生していませんでした。
<DBConメモ>
Debugビルドでは、以下で出力した内容を表示してくれます。
Debugger.Log()
Debug.WriteLine()
Releaseビルドでも、以下は取得できます(出力しています?)。(レベル引数は5で試しました)
Debugger.Log()
(Console.WriteLine()はどちらのビルドでも不可)
538 = :
黒で塗りつぶされた四角形を作るクラスを作りたいのですが、
どうもうまくいきません。(表示されない)
どこが悪いか教えていただけませんでしょうか?
黒塗りの四角形のクラスは以下のとおりです。
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace SilverlightApplication1
{
public class Block : Shape
{
Rectangle colorRectangle = new Rectangle();
SolidColorBrush testBlack = new SolidColorBrush();
public Block()
{
testBlack.Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
colorRectangle.Width = 100;
colorRectangle.Height = 50;
colorRectangle.Fill = testBlack;
}
}
}
このクラスをメインプログラムから、以下の命令で読み出します。
Canvas.SetLeft(testblock, 550);
Canvas.SetTop(testblock, 100);
testblock.Height = 100;
testblock.Width = 50;
canvas.Children.Add(testblock);
540 = :
そもそも、クラス内で作っているcolorRectangleがどこにも使われていない件について。
public class Block
{
Rectangle colorRectangle = new Rectangle();
SolidColorBrush testBlack = new SolidColorBrush();
public Block(Panel owner)
{
testBlack.Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
colorRectangle.Width = 100;
colorRectangle.Height = 50;
colorRectangle.Fill = testBlack;
owner.Children.Add(colorRectangle);
}
}
とかにして、
Block block = new Block(canvas);
で出るんでないかな。
542 = :
試しに会社のPC & ネット環境から見に行くと、私が↑で書いたプログラムだと tmpは1、2個程度で
それ以上増えませんでした。
しかし、@ITのサイトは住所を変更しなくてもボタンを押すたびに次々増えていきました。
現象に統一性がないのがアレですが、IEもしくはPC環境の問題も絡んで面倒なことになりそうな
気がしてきました。;;
(IEの設定は持ち帰りましたので、この後調べます。)
ちなみに自PC起動直後に試してみたところ、両サイトとも tmpが10個前後まで増えたあと、
急に2、3個に減りました。(しばらく待ってもゼロ個になることはありません)
現象が変わってます。ん~~、よくわかりません。
コンピュータなんだから、毎回同じ動きしてほしいものです。w
取り急ぎ報告まで。
543 = :
対処療法ですが、tmpの作成個数を抑える方法が見つかりました。
それはガベージコレクション(以下GC)。
通常は自動にまかせて問題ないし、メモリにしか関係しないと思っていました。
(少なくとも私はメモリを食いつぶされた経験はありません。今回もメモリは十分残っていました。)
私の↑のプログラムで言えば、mWebClient_DownloadStringCompleted(…)の処理の最後に以下を記述します。
GC.Collect();
すると、最新の tmpのみ残りそれ以前のは即時削除されました。
元々問題となっていた、ループ中で通信して数十GBも食いつぶすプログラムでは、10~15個 tmpが溜まった後
最新以外が一気に消えるという繰り返しになりました。
(こちらも GCは通信処理の末尾に記述)
このプログラムの処理をもう少し詳しく書くと、
(1) メインの処理は、0.5秒間隔のTimerで常にある処理をしている。
(2) 上記処理を行いながら、約10秒ごとに非同期でファイルを取得する。← DownloadStringAsync
のようなことをしています。
この場合は、(2)で毎回GCを行っても、必ずしも削除されるわけではないようです。
Bestな解決方法とは言えませんが、とりあえず回避はできるようですので〆ようと思います。
(ここはずっと見てますので、根本解決が見つかれば書き込んでいただければ幸いです。)
協力してくださった皆様、ありがとうございました。m(_ _)m
GCが tmp削除に関連している理由は予想しかできないので書きませんが、この対処方法を見つけた時は、
「何でやねん」と叫んだことを付記しておきます。w
545 = :
他のSLアプリでも起きてるので環境だと思う。
めちゃくちゃメモリが乗っかっててGCが発生しにくいとか。
546 = :
こういう時は、多少面倒でもWebRequestを使ったほうが良いかもしれないな。
547 = :
> 他のSLアプリでも起きてるので環境だと思う。
全く根拠になってねぇ
548 = :
>>547
ごめん。言い直すよ。
他のSLアプリでも起きてるので環境だと思う。根拠はない。
549 = :
他のSLアプリも馬鹿が作ってたらその理屈は通らないだろw
550 = :
GCでアンマネージリソースが廃棄されると言われると、
普通の人はファイナライザで廃棄されてるんだなと考える。
そしてリクエスト毎にwebclientをnewし、不要になったものからDisposeしてみることから試すと思う。
やってみてないけど。
類似してるかもしれないスレッド
- Microsoft Silverlight その9 (574) - [96%] - 2023/1/25 14:30
- Microsoft Silverlight その8 (996) - [96%] - 2011/11/12 23:46 ○
- Microsoft Silverlight その7 (1001) - [96%] - 2011/3/24 1:31 ○
- Microsoft Silverlight その6 (1001) - [96%] - 2010/11/1 4:09
- Microsoft Silverlight その5 (984) - [96%] - 2010/4/16 20:20 ☆
- Microsoft Silverlight 2.0 その3 (556) - [83%] - 2009/3/24 0:35 ○
- Microsoft Silverlight 2.0 その2 (1001) - [78%] - 2008/11/21 11:47 ○
- Microsoft Silverlight 2.0 (1001) - [74%] - 2008/5/12 6:08 ○
- Silverlight登場で.NET使い大勝利!!! Part2 (525) - [18446744073709551603%] - 2016/10/16 0:30 ○
トップメニューへ / →のくす牧場書庫について