ニッチな日々のブログ

ゲームとかプログラミング(Nodejs(React Express) python C#)とか自作PC作ったりいろいろ好きなことやって生きてます。詰まったプログラムとかあったら参考までに上げたりしますのでよかったら(*'▽')

WindowsでLinux(Ubuntu等)開発できる最近のマイブームWSL2を紹介~

 

どうも~~ゆたです!

 

最近音楽鑑賞を英語のものばかり聞いてたらわからないなりに調べながら聞くから

ちょっと聞こえるようになってきたというかね笑

 

もっと英語できるようになりたいなと最近すごく思ってます(; ・`д・´)

英語圏の友達ほしーーぜー。。。。笑

どうやったらできるんでしょう?出張とか?\(゜ロ\)(/ロ゜)/

 

さて話は変わるんですけど最近すごくはまってるものがありまして

タイトルにもあるようにWSL2というものにはまっていまして

この機能最近Windowsに追加された機能で

Windows上でLinuxが動かせるぜみたいな昨日なんですが

バーチャルボックスとかdual bootのようなめんどくさい技を使わないで

サクッと使えて便利なので使い方も含め軽く紹介したいと思います!(^^♪

 

インストールの仕方は以下によって記載されていますが少し特筆事項だけ

丁寧に記載します

Install Windows Subsystem for Linux (WSL) on Windows 10 | Microsoft Docs

 

コントロール パネル\プログラム\プログラムと機能

エクスプローラーに張り付け

windowsの機能の有効化と~~をクリックで以下画面をチェック!

f:id:niche_na_hibi:20210131225411p:plain

 

あとは公式手順に沿ってパワーシェルを管理者で叩いてコマンドをコピペで張って

ubuntuなりのディストリビューションwindowsストアから拾ってくると終わりです~

 

あとはいつものubuntu触る感じで開発ができます!

 

しかもwindows上のファイルもフォルダマウントをすれば簡単にアクセスできます!

 

smbやってみたいな手順もいらないので楽ですよ~

scpコマンドも投げなくていいのは楽です~

 

まぁVSCODEssh可能なのですが一つの機械で開発できるのはいいですよね~

 

ただやっぱり本物のUbuntuOSを単独で使うよりかは性能は出し切れない感はあります

いろいろ検証したのですが少し応答が遅かったりプログラムの完走が遅かったりはします

まぁmsecとかのレベルで気にするかどうかなんですけどね笑

 

ただやっぱWSL上でDocker CEを使って環境作ってテストするでそれを本番環境に

デプロイするときの安心感はありますよね笑

 

windows上のDocker Desktopでやるよりは確実性が上がるといいますか笑

 

あと私はvim等のエディターが使えないです(使えなくはないけど苦手。。。)

まぁguiに頼りたいお年頃なのでwindowsで何でもやりたいんですよ。。。

 

でもlinux環境も扱えないと社会人やってけなくなる時もあるわけで

誰も教えてくれないから仮想環境を模索の過程で

dual bootに失敗してWin10 OS消したりして人生を歩んできたんですけど

WSLならそういうリスクもないですSSDを少し食うくらい笑

 

やっぱUbuntuでDocker使って開発するの楽なんですよね何度もサーバー変えたりとか

人に引き継ぐときにコマンド一発ですから。。。( ;∀;)

 

一からソフト拾ってきて

pip~~~ npm~~~とかsudo apt installみたいなやらなくても事前に定義してあげれば

全部勝手に入っていきますからね~

 

本当にwindowsOSはすごいOSだと思います~

 

MacOSは触ったことないからわからないですけど結構開発で触ってる人多いですよね~

あれはやりやすいのかなぁ~?

経験してみたいが金がないからな。。。笑

 

winとubuntuで当分遊ぶしかないのかなぁ(^^♪

 

まぁ遊びきれてないから何の不満もないですけど笑

 

どんどんOSが進化していくので僕も進化しないとなぁ(/ω\)

 

いじょ~~~

 

 

 

社内WIKIツールGrowiが高機能で便利だった件について。

 

ども~ゆたです~

 

最近気温が少し上がったせいか眠たくて眠たくて。。。

本読んでるとうとうとしてしまってつらいです。。。。( ;∀;)

 

英語の勉強してるのですけど全然捗らないーーーって笑

焦りが足りないんだと思うのでもっと自分に厳しくしないとな。。。。*1

 

さてタイトルにあるツールGrowiというのを最近自分の資料管理

のためにサクッと導入してみましたのでちょっと紹介します!

 

入れた環境はDockerを使ってUbuntu上に入れたんですけど

多分Winでも動くはずです!(*'▽')

 

シンプルに以下のコマンドたたけば普通に動きます~

cd growi-docker-compose
docker-compose up -d

 

データのバックアップとか移行をはじめから加味したい場合は

DockerでGrowiをセットアップする - Qiita

を参考にするとEasyに設定できることでしょう!

ちなみにProxy関連で止められる場合(実際に止められた私笑)

growi-docker-compose内のDockerFileのCurlの前にProxyを通るように

httpproxyの設定を書いてあげたり

 

ElasticserchのDockerFileのkuromojiなどのモジュールインストール時のコマンドに

proxyを設定したりすればサクッと行きますよ!

Java ネットワークとプロキシ (oracle.com)

設定方法は上記が参考になります~

 

さて本題なのですが、どんな風にいいのかって話です!

 

このツールすごいいいのがプレビュー見ながらmarkdown

記述できるということです!

 

最近私なんでもMDで管理するのが好きでして

手順書とかコーディング資料とか報告資料などいろいろMDで作っていまして

ただやっぱりファイルの管理ってめんどくさいんですよね。。。

 

ルールベースのフォルダ作って綺麗に管理して

あれそういえばあの手順書どこ行った。。。。みたいなね・・・・

いろんなファイル触ってると余計そういうのが多くて。。。(; ・`д・´)

 

そういうのがWeb上で全部管理できるからマジで便利ですよね。。。

しかもElasticserchがバックに構えてるから検索もできるわけですよ

日本語全文検索ができるってすごいですよね。。。

 

キーワードで検索できるから見失うこともないし。。。。笑

 

あとMDを書くためのエディタが高機能でDraw.ioの機能も付いているので

Draw.ioで図を書いてそれを適応することもできるし

ローカルのファイルをドラッグアンドドロップでアップロードもできるから

操作性も最高(*'▽')

 

誰かに資料送るときとか自分で楽しむとき

チーム内で情報をシェアするときこういったときにかなり有効だと思います!

 

もともとはRedmineなどで管理してたりしてたんですけど

やっぱりチケットで残したりとかwikiを拡張したりとかいろいろ方法論は

あるんですけどNoSQLを使った検索ってすごく強みだと思うんですね

早いし全文検索(日本語の携帯要素分析エンジンを入れれば)できるし

 

検索ってなかなか伝わらないすごさがあると思ってて

これが一瞬でできる技術の進歩のおかげで世の中はどんどん良くなっていると

思うのでこういう高機能なツールを使いこなしていけないと時代に取り残されるなーと思いました笑

 

こういったツールが当たり前に使われるようになることで

エクセルで資料を管理する俺流エクセルの時代は終わりが近いと勝手に思ってます笑

UbuntuとかのOSからも気軽に見えますしね~

クロスプラットフォーム対応は必須な技術ですから~

 

いじょ~~~

*1:+_+

WindowsでC言語コンパイル環境とデバッグ環境(VSCODE)を整えるときに困ったので忘備録として

 

どうも最近VSCODE好きすぎて秀丸エディタから卒業しつつあるゆたです~

(とはいえ何万行とかの大規模なコードを追いかけるときは秀丸使いますけど笑)

 

最近寒さも少し落ち着いてきましたね~おかげでしもやけが治り始めてて

ハッピーハッピーでございます(*'▽')

 

早く春になっておくれ!

お花見は今年できないだろうな...ToT


前置きは置いておいて

今日ちょっとWINDOWSC言語の開発環境を整えてて

ちょっと苦戦したので紹介していこうと思います!

 

やり方さえわかればサクッと入れれるんで見てってください!www

コンパイル環境のダウンロードとインストール!

MinGW - Minimalist GNU for Windows download | SourceForge.net

 

SourceForgeにて落ちていたものを使いました~

これはもう言うまでもなくダウンロードボタンぽちーでダウンロードできます~~~

 

その後ダブルクリックいただいて

初期設定状態でINSTALLを押して

ちょっと待つ( ..)φメモメモ

 

Continueを押して

だいぶ待つ(コーヒーでも飲んで音楽聞いてられるくらい待つ)

 

でもう一回Continueを押して~

 

mingw-base-bin
mingw32-gcc-g++-bin

にチェック!!!(^^♪

 

InstallationタブのApply Changesよりインストール開始です!

Applyを押して

 

だいぶ待つ(この間にネットサーフィンでもしているといいと思います笑)

 

でインストール完了しましたら

 

閉じていただいて

 

winボタン+ Rキー

control sysdm.cplを入力

f:id:niche_na_hibi:20210118221944p:plain

詳細設定タブよりPathというところにC:\MinGW\bin\を新規で環境変数追加

を行ってください!

 

そするとcmdからgccというコンパイラが実行できます!

 

試しにgcc -vとコマンドプロンプトに叩き込んでみましょう!

そするとコンパイラバージョンが出ると思います~~~

これであなたもC言語デビュー笑

VSCODE準備!

VSCODEは入ってるものだと思って説明します

f:id:niche_na_hibi:20210118222347p:plain

f:id:niche_na_hibi:20210118222455p:plain

 

この写真の二つをマーケットプレイスから探してください

キーワードは

Cとcodeで一番上に出てきて間違えにくいと思います~

coderunerの設定はちょっと面倒なので

Visual Studio CodeでC言語プログラミングを始める(Windows編) | 電脳産物 (dianxnao.com)

を参照するとうまくいきますよ~

これを入れてあげるとVS上で実行できるようになります~~

 

試しに任意のフォルダ(gcctest)に以下のようなファイル

hello.cみたいなのを追加してVScodeでフォルダを開くをやってみましょう

三角のボタンで実行できるかと思いますよ~

#include <stdio.h>
int main(void)
{
    printf("HELLO\n");
    return 0;
}

 

 

で次にですがデバッグ環境を整えます!

 

f:id:niche_na_hibi:20210118222915p:plain

この虫みたいなやつを触っていただいて

launch.jsonを作成の文字を触ります

そするとC++(GDB/LLDB)

という質問みたいなのがVSから対話式で来ますのでそれを選択!

はいこれで完了です!

いろいろサイト見てややこしいこと書いてあったんですけどこれでもう

デバッグ実行できます!

ブレーク張ったり変数watchしながら動かしたりできますので

スクリプト言語みたいにCが扱えて便利ですよ~

 

いやぁ便利な時代ですよね笑

VSさえあればある程度の言語かけるんじゃないかと思ってしまいます。。。笑

 

マイクロソフト様様です(*'▽')

 

とまぁ簡易的でしたけどコンパイル環境紹介でした!

サクッとやりたい方に向けて短いですが記載しました~~~(#^^#)

 

いじょ~~~~~('◇')ゞ

Linux(Ubuntu)環境向けWEB開発してるときに便利だと思った機能紹介。

 

どうも~~ゆたです(*'▽')

 

最近喉が痛いような痛くないようなで変な感じで

ちょっと気分がなえてます笑

 

電話会議とか声が出ないんですよねたまに笑

しゃべりすぎなのかな笑

 

さて最近私仕事でLinux(Ubuntu)デビューしまして

半年くらいたったのでちょっと紹介できればなと思います~~

 

まぁまだまだ全然このジャンル初心者なんですけどね笑

ただやっぱり仕事なのでこなさなきゃいけない中で苦労して最初に

知ってればよかった!!!ってこといっぱいあるわけで笑

きっと同じような境遇の方がいるだろうと思うので残すものは残す精神で書きます笑

 

Win環境からUbuntuで開発するときはSSHを使うべし~

まぁ多分これ当たり前なんですけど

やっぱsrcとかコーディングするとき慣れた環境

慣れたエディタ使いたいじゃないですか笑

となるとたいていの人はwinで開発するんですよね

winで調べものしながらubuntuたたくみたいなねw

でもSSHを使えばWindows上からUbuntuをたたけるわけですよ笑

 

ファイルの転送はscpを使う

winから一括でファイルを送るときはscpコマンドを使うといいです!

相手のディレクトリ構造をpwdコマンドでとってきて転送したいフォルダと

指定すれば簡単にデータが飛ばせます~~~

まぁこの機能は別のやり方でもできるので

機能としてあると理解するのがいいと思います~

 

大本命VSCODESSH機能を使うべし

VSCodeからSSH接続をする方法 | server-memo.net (server-memo.net)

このサイトを参考にして私も導入してみたのですが

この機能マジで神です・・・・

winで開発している人ってguiにかなり依存していて

guiがないと混乱するというかね笑

フォルダツリーとかもそうですけどソースの構造がすっと頭に入ってかないんですよwww

ls cd pwd mkdirこういったコマンドなくてもフォルダ操作が容易にできるので

是非入れるといいと思います!

ちなみにwinのファイルをコピーしてVSCODEのフォルダの上でペーストすると

フォルダが自動転送されます多分裏でscpしてるのだと思います

めちゃ便利です。。。。笑

 

コンソールの小ネタ

tab補完機能が有能!

この機能多分有名なのですが最初知らずに全部手打ちして

頑張ってる時期がありました・・・・

この機能例えばsudo apt i

と入力したタイミングでtabを押すとsudo apt installと補完してくれるんですね笑

ホントすごいっすよね(; ・`д・´)

 

ほかにもディレクトリ移動のためにcdをしたときに

tabを押すと現在いるディレクトリのサブディレクトリが一覧となって出てくるので

その状態で開きたいファイルの頭文字を入れtabを押すと補完が走るんですね。。。

マジ便利すぎかよって思いますよwww

 

とまぁ開発するときに便利な機能ちょこっとですけど紹介でした~

Docker環境とかはwinとほぼ使い方同じなんで結構使いやすいですよ~

もともとLinuxでやるの大変なんでしょーって思ってたんですけどなれると

楽しいですしパッケージマネージャーが優秀で・・・・

winが全部いいってわけでもないかなって思ってます笑

まぁコンソールで使えるテキストエディタもちょっとした修正にはいいですよね~

nanoとかviとかvimとかねw

 

まぁ僕と同じように会社のシステム移行のために使わないといかんくなったり

した人はさらっと見ていただけるとちょっと楽できると思いますので是非笑

 

いじょ~~~\(゜ロ\)(/ロ゜)/

 

 

資料作成時短!脱エクセル!マークダウン(PDF作成手順も可能!)を使った簡単資料作成のすすめ(*'▽')

 

どうも~最近在宅でコーヒー過剰摂取気味のゆたです~(^^♪

 

今日はプログラミングの紹介じゃないんですけど

プログラミングするときによく使う

ちょっとした時短テクを紹介したいと思います~

 

興味ある方はぜひ見ていってください!

 

では早速!

 

皆さんこんなシーンないですか?

上司に急いでプレゼンしないといけない

部下に急ぎのようで手順書を作ってあげないといけない

会議資料を急いで作らないといけない

会議資料に時間をかけたくない!

等など

 

そんな時にマークダウンを使って資料を作成すると早くかけて

しかも綺麗にできます!

もちろんPDFなどに変換したりHTMLにしてChromeで見たりもできるようにできます!

 

どうやるの?

まずは環境整備から~(^^♪

 

VSCODEを導入します!

Download Visual Studio Code - Mac, Linux, Windows

まぁこれは自分のオフィス環境に合わせて入れてくれればいいですね~

 

markdown PDFというプラグインを刺します

Markdown PDF - Visual Studio Marketplace

VSCODEにてCTRL + SHIFT + XキーでMarketplaceで検索ができますのでそこに

markdown PDFと入れてくださいね~

f:id:niche_na_hibi:20210111223207p:plain

 

導入できたら資料を保管したいフォルダにtxtを新規作成して

リネームします

新しいテキスト.txtだったら

会議資料.md

のような感じですね~

 

で実際のファイルはこんな感じで書いてみます

 

プレビューを見ながら作成しています以下のような感じ

f:id:niche_na_hibi:20210111224014p:plain

 

記載内容

# ○○について

* 本日の議題
1. aaaについて
1. bbbについて
1. cccについて

| フライト時間 | ロケーション | 到着予定時間 | 
| ------------ | ------------ | ------------ | 
| 11:00        | Tokyo        | 12:00        | 
| 12:00        | Osaka        | 13:00        | 
| 13:00        | Okinawa      | 14:00        | 

 

表を作成したり1. を続けることで連番を振ったり #

をつけて見出しとしたりすることができることができます

 ※注意 #などの特殊記号の後には半角スペースが必要です

wikipediaも参考になると思うので添付します~

 Markdown - Wikipedia

 

表の挿入や例えば画像を挿入したいケースも

![画像の説明テキスト](画像リンク)

にて挿入することができます。

 

どうでしょすごく簡単でしょ?

 

エクセルの切り貼りのほうが簡単そうに思えるけどいざやってみると

エクセルの切り貼りや図の調整フォントの調整こういったしがらみから抜けれます~

# 打つだけで文字も大きくなって下線も引かれる

 

表を書いたりフローチャートかけないじゃん!というあなた!

実はそういうのを書くのが簡単になるツールもございます!

Untitled Diagram - diagrams.net

draw.ioですね~これは表を作成してあとは画像を保存してあげればmdに

追加していくだけでフローチャート付きの資料になります~

 

あとやはりエクセルやパワポってお絵描き中心でシートのどこに書こうだとか

スライドの効果どうしようとか会議の目的から考えたら結構無駄なことやってるんですよね。。。。

まぁそれでもわれわれ日本人はパワポやエクセルを愛してしまうんですけど笑

 

でもその資料他人に更新してもらったりとかしてバージョン管理が

求められるようになった時

いちいち何が変わりましたって別資料に残したりするのめんどくさいですよね。

マークダウンならテキストフォーマットなのでマージツールで一発比較できますし

そういった時短にもつながるわけですね~

(最近は何でもトレーサビリティーですからねw)

例えば手順書とかは最たる例ですよね~

手順まとめて実際やったら変わるとかあるので~gitで管理したりとかね~~(^^♪

あとOFFICEがないPC環境でも使えるのはメリットですよね~

 

あとテキストで書くって結構大事でキーボードOnlyで資料作成できるというメリット

あとはテキストで書くことで伝えることに重きを置くわけですから絵で分かった

気にさせないっていうのにも一躍買えると思っています。

(まぁとはいえ画像とかを添付して見やすくするのも大事ですけどね~)

 

という感じでマークダウンで資料に起こすのに私は結構はまっていて

よいと思ったので紹介でした~~~('◇')ゞ

 

よかったら皆さん仕事で使ってみてください~~

pptとかエクセル作ってすごい時間かかる方は

使ってけずれた時間を使ってほかのことに力を入れれば

きっと周りとちょっとした差別化できますよ~~(*'▽')

 

いじょ~~~~

WCF使用+CORSの設定をしてクローム等の新し目なブラウザからローカルのファイルを開く方法(Windowsユーザー向け)

 

どうもゆたです(^^♪

 

買ったものばかりじゃつまらないと思うので、

プログラミングで最近2日くらい頭を悩ませた事柄を

ちょっと書いていこうと思います。(/ω\)

 

きっと同じように困ってる人がいると思うので良ければ参考に~

(経緯書きまくってるのでコードだけ見たい人は最後のほうに書いてますので~)

※Reactを例にしていますけど自分が使っているのがreactなだけであって

phpとかでも同じなのでさらっと見てってください

 

本題ですが

僕は仕事にてオンプレミス(クラウドとか使わない内内のやつです)での

webサービスを作成保守管理したりしていて(最近はやりの脱Excelってやつですね~)

すごく困ったことに出くわしました。。。。

 

最近のブラウザ進化しててフォルダにブラウザから直接飛べない問題です。

IEの時代には、fileみたいなタグをつけると飛べたんですが

その辺が一切できなくなっていてwebでデータ管理していても

ローカルのおよびサーバーのフォルダデータを直接参照したい編集したいという

同僚のニーズによって何か突破方法はないかと思って探していました( ;∀;)

 

最初はレジストリを編集してbatファイル経由でエクスプローラを開いてと

やっていましたがいざやってみると遅い。。。

しかもユーザータイミングの操作なのでReactでボタン押したら何か制御するとか

一切できない・・・・

 

ほかの方法を調べるとNodejsをみんなにインストールしてもらったらできるとかいろいろあったんですが

Nodejsを開発もしてない人に入れてもらうのハードル高くね。。。。

と思ったりなんかしたりして

 

exeにしてインストール式にして配布できんかなといろいろ模索していたら

C#WCFとかいうローカルでrestできるめちゃ便利なサービスあるやん!?!?!?

ということで試してみました(ただこれが思ったより沼だった・・・)

 

やりたいこととメカニズム

 ReactにはAxiosというxhr通信用モジュールがあってRestAPIの

エンドポイントにアクセスすることができるのですが

ローカルでエンドポイントがあればアクセスできるじゃんと

つまりは下の感じ

f:id:niche_na_hibi:20210102170823p:plain

 

これができると何がいいか

webのフロントサイドからローカルに向けて操作ができる

フロントエンドからrestを使っての処理なので命令後にどういう画面遷移にするとかいった細かい設定ができる

 

沼にはまったところ

まず初めにCorsというものに阻まれました・・・・

wcfでcorsの設定の仕方わからな過ぎて検索しても答えに近いようで遠いようなものとか

英語のものばかりでよくわからんかったりとか・・・・

 

次にxhr通信の本質を全く今まで理解せずにフロントエンドバックエンド言語

で物を作ってきた(ただのまぬけ・・・)

私の未熟さにありましたそれが今に来たかという

Get以外にはpreflight requestという謎なものがあって

postなどが来た時にOptionsというメソッドが走って

調子はどう?やってる?みたいなことをしていてそいつをやってるよって返してあげるのに気が付くまでに半日かかりました・・・・( ;∀;)

 

 制約

 インストールする際にユーザー様のportを開放しないといけないので

 

netsh http add urlacl url=http://+:80/ServiceURL user=Everyone

 (URLあってもなくてもよかったかも。。。)

 こんな感じのを管理者でユーザーにたたいてもらう

or

batを作って配布してあげないといけないです。

 (セキュリティの観点からみても制約込みの機能ということですね( ..)φ)

 

実際のWCFプログラム 

まずVisualstudioを立ち上げてもらってC#のコンソールアプリケーションを

立ち上げましょう

そしていったん仮にProgram_1という名前で作りましょう

(常駐させるのであればコンパイル時に表示オプションを切ることをお勧めします)

注意点としては.Net coreを選ぶと参照が見つからなくて何だこいつ嘘かよって

なるかもしれないのでそこだけは先に注意です!( ;∀;)

 

あとpost,put,delete(厳密にいえばGet以外のメソッド)には

preflight requestがあるのでoptionsのエンドポイントを追加を忘れずに!

 

Program_1.cs

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Web;

namespace Program_1
{

    class Program_1
    {
        static void Main(string[] args)
        {
            using (ServiceHost sh = new ServiceHost(typeof(MyService)))
            {
                sh.Open();
                Console.WriteLine("service...");
                Console.ReadLine();
                sh.Close();
            }

        }
    }
    [ServiceContract(Namespace = "Program_1")]
    public interface IService
    {
        //個々の部分がexpressとかでいうエンドポイント
        //postに変えてjsonで処理というのでもいいと思います
        //postにはpreflight requestがあるのでoptionsを追加を忘れずに!
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        string Helloworld();
    }
    public class MyService : IService
    {
        //処理層
        public string Helloworld()
        {

            //この辺にフォルダ展開なりを入れればいい
            //やり方はいろいろあると思います


            return $"HelloWorld,{DateTime.Now.ToShortTimeString()}";
        }
    }
    public class CustomHeaderMessageInspector : IDispatchMessageInspector
    {
        Dictionary<string, string> requiredHeaders;
        public CustomHeaderMessageInspector(Dictionary<string, string> headers)
        {
            requiredHeaders = headers ?? new Dictionary<string, string>();
        }
        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            string displayText = $"Server has received the following message:{ request}";
            Console.WriteLine(displayText);
            return null;
        }

        public void BeforeSendReply(ref Message reply, object correlationState)
        {
            var httpHeader = reply.Properties["httpResponse"] as HttpResponseMessageProperty;
            foreach (var item in requiredHeaders)
            {
                httpHeader.Headers.Add(item.Key, item.Value);
            }

            string displayText = $"Server has replied the following message:{ reply}";
            Console.WriteLine(displayText);

        }
    }
    public class CustomContractBehaviorAttribute : BehaviorExtensionElement, IEndpointBehavior
    {
        public override Type BehaviorType => typeof(CustomContractBehaviorAttribute);

        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
            var requiredHeaders = new Dictionary<string, string>();

            //originヘッダーを上書き
            requiredHeaders.Add("Access-Control-Allow-Origin", "*");
            requiredHeaders.Add("Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS");
            requiredHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");

            endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CustomHeaderMessageInspector(requiredHeaders));
        }

        public void Validate(ServiceEndpoint endpoint)
        {

        }

        protected override object CreateBehavior()
        {
            return new CustomContractBehaviorAttribute();
        }
    }

}

 

 App.config

ぐちゃっとしてますが以下を追記でOKお願いします・・・

 

<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration>    <startup>         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />    </startup>
<system.serviceModel> <services> <service name="Program_1.MyService" behaviorConfiguration="mybahavior"> <endpoint address="" binding="webHttpBinding" contract="Program_1.IService" behaviorConfiguration="rest"></endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> <host> <baseAddresses> <add baseAddress="http://localhost:5638"/> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="mybahavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="rest"> <webHttp /> <CorsBehavior /> </behavior> </endpointBehaviors> </behaviors> <extensions> <behaviorExtensions> <add name="CorsBehavior" type="Program_1.CustomContractBehaviorAttribute, Program_1" /> </behaviorExtensions> </extensions> </system.serviceModel></configuration></configuration>

 

最後に

 あとはお好みに合わせてメソッド足したりやりたいことを足していただければ

webからローカルへの命令がいろいろできます~

だいぶわかりにくいと思いますがいじょうです~

困ったことがこれですっきりしたので同じ境遇の人が見つけてくれるといいな(/ω\)

 

 以上~~(#^.^#)

 

参考:自己ホステッドWCFサービス上のCORS (366service.com)